使用Entity Framework时LINQ(列不存在)出错

时间:2013-07-19 09:54:00

标签: linq entity-framework postgresql

这个问题是我上一个问题的概括:

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个关系,它们正常工作!

问题:这个假设是否正确?!多余列的问题来自于具有一些关系的异常表? 谢谢!

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; }