这个问题是我上一个问题的概括:
Error in LINQ when work with PostGreSQL by Entity Framework
我假设,如果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个关系,它们正常工作!
问题:这个假设是否正确?!多余列的问题来自于具有一些关系的异常表? 谢谢!
答案 0 :(得分: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
中应用a
属性来解决问题:
[InverseProperty("aCollection")]
public virtual contractors contractors { get; set; }
[InverseProperty("aCollection1")]
public virtual contractors contractors1 { get; set; }