0

这个问题是我之前问题的概括:

通过实体框架使用 PostGreSQL 时 LINQ 出错
我有一个假设,即如果 2 个表之间存在超过 1 个关系(我的示例为 7 个),EF 会尝试通过添加额外的列来规范化该表。

例如模型a:

public partial class a
{        
    [Key]
    public int id { get; set; }

    [ForeignKey("contractors"), Column(Order = 0)]
    public Nullable<int> ot_contractor_id { get; set; }

    [ForeignKey("contractors1"), Column(Order = 1)]
    public Nullable<int> gvo_contractor_id { get; set; }

    public virtual contractors contractors { get; set; }
    public virtual contractors contractors1 { get; set; }    
}

表 [a] 与表 [contractors].[id] 有关系因此,EF 生成列的“contractors_id”和“contractors1_id”。

其他表只有 1 个关系,它们工作正常!

问题:这个假设正确吗?而多余列的问题来自具有少数关系的非正规表?谢谢!

4

1 回答 1

2

如果您在contractors类中有反向导航属性,则可能会发生这种情况,如下所示:

public partial class contractors
{
    //...

    public virtual ICollection<a> aCollection { get; set; }
    public virtual ICollection<a> aCollection1 { get; set; }
}

在这种情况下,EF 将不知道哪个属于类中的哪个导航属性,a并假定四个关系而不是两个(或者如果您只有一个集合,则三个而不是两个)。这些附加关系将有一个单独的外键,其中之一是contractors_id. 如果数据库中不存在,则会出现异常。

InverseProperty您可以通过在 class 中应用属性来解决问题a

[InverseProperty("aCollection")]
public virtual contractors contractors { get; set; }
[InverseProperty("aCollection1")]
public virtual contractors contractors1 { get; set; }
于 2013-07-19T16:26:11.150 回答