在表上设置复合键,只有一对一或一对一的关系

时间:2014-02-27 11:15:20

标签: c# entity-framework ef-code-first fluent composite-key

使用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设置的标量属性。然而,因为它是一对一的我不能使用它。

怎么办?

1 个答案:

答案 0 :(得分:0)

当指定A-> C.WithOptional时,EF假定表A和C具有相同的PK。

我建议记住0..1 /注释,并在A-&gt; C和B-&gt; C链接中指定.WithMany().HasForeignKey(..)