如何在实体框架中为复合主键的特定列创建外键

Posted

技术标签:

【中文标题】如何在实体框架中为复合主键的特定列创建外键【英文标题】:How to make foreign key inside models for particular column of composite primary key in Entity Framework 【发布时间】:2019-09-07 05:49:02 【问题描述】:
class1

    [key]
    public string id1 get; set;

    [Key]
    public string key2 get; set;


class2

    [foreignKey("class1")]
    public string class1Id get; set; 

现在在class2 内部,我只想使用class1id1 列作为外键。

怎么做?

【问题讨论】:

这似乎与 ASP.NET 无关。 你不能。 FK 只能指向被引用表中的 unique 列(主键或备用键)。 【参考方案1】:

如果您更喜欢数据注释,只需在导航属性上应用 ForeignKey 属性,并提供一个带有 FK 属性名称的逗号分隔列表

 class1
    [key]
    public string id1 get; set;

    [Key]
    public string key2 get; set;
    

    class2

    public string id1  get; set;

    public string key2  get; set;

      [ForeignKey("id1,key2")] // <= the composite FK
      public virtual class1 class1 get; set; 

    

使用流畅的 API 配置更容易理解且不易出错:

modelBuilder.Entity< class2>()
    .HasRequired(e => e. class1) 
    .HasForeignKey(e => new  e.id1, e.key2 );

【讨论】:

以上是关于如何在实体框架中为复合主键的特定列创建外键的主要内容,如果未能解决你的问题,请参考以下文章

复合主键和外键 Code First

Spring用外键保存复合主键

如何让 jOOQ 生成不引用主键的复合外键?

mysql外键仅引用复合主键的一部分

创建复合键实体框架

实体框架存在部分自动生成的复合键问题