我有一个像这样的第一类代码:
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)上有一个外键吗? 如果是的话,我该如何申报呢?
答案 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
重载。