使用EF6我试图定义以下关系A(1)---(0..1)C(0..1)---(1)B
((x)
是基数)。然后,表C将使用A和B中的2个外键的复合键。
// Other properties are omitted for brevity
public class A
{
public int Id { get; set; }
public virtual C C { get; set; }
}
public class B
{
public int Id { get; set; }
public virtual C C { get; set; }
}
public class C
{
public virtual A A { get; set; }
public virtual B B { get; set; }
}
这是我提出的流畅的API。
public class C : EntityTypeConfiguration<C>
{
public C()
{
// Primary Key
this.HasKey(t => new { t.A, t.B}); // This is the problem
// Relationships
this.HasRequired(t => t.A)
.WithOptional(t => t.C);
// cannot use .HasForeignKey
this.HasRequired(t => t.B)
.WithOptional(t => t.C);
// cannot use .HasForeignKey
}
}
HasKey(t => new { t.A, t.B})
是不允许的,它需要通常使用.HasForeignKey
设置的标量属性。然而,因为它是一对一的我不能使用它。
怎么办?
答案 0 :(得分:0)
当指定A-> C.WithOptional时,EF假定表A和C具有相同的PK。
我建议记住0..1 /注释,并在A-&gt; C和B-&gt; C链接中指定.WithMany().HasForeignKey(..)
。