EntityFramework - 在相同列上但具有不同顺序的复合外键和复合键

时间:2017-02-24 17:47:31

标签: entity-framework foreign-keys primary-key

我有一个像这样的第一类代码:

public class Class1
{
    // first column of primary key, second column of foreign key to class 2
    public string Property1 { get; set; }
    // second column of primary key, first column of foreign key to class 2
    public string Property2 { get; set; }
    public string Property3 { get; set; }
}

public class Class2
{
    // first column of primary key
    public string Property2_1 { get; set; }
    // second column of primary key
    public string Property2_2 { get; set; }
    public string Property2_3 { get; set; }
}

我知道这听起来很奇怪,但是有可能在property1(col 1)和property 2(col2)上有一个主键,在属性2(col 1)和属性1(col2)上有一个外键吗? 如果是的话,我该如何申报呢?

1 个答案:

答案 0 :(得分:1)

使用Fluent API完全可以实现(目前无论如何都是the only way to configure Composite PK)。

首先,PK配置:

modelBuilder.Entity<Class2>()
    .HasKey(e => new { e.Property2_1, e.Property2_2 });

modelBuilder.Entity<Class1>()
    .HasKey(e => new { e.Property1, e.Property2 });

然后是FK配置(很难确切地说明没有导航属性的关系类型,所以假设Class1(很多)&lt; - &gt;(一){{1} }):

Class2

如果您有导航属性,请确保使用正确的modelBuilder.Entity<Class1>() .HasOne<Class2>() .WithMany() .HasForeignKey(e => new { e.Property2, e.Property1 }); / Has重载。