实体框架交换导航属性

时间:2018-12-19 10:26:32

标签: asp.net .net entity-framework edmx edmx-designer

我将EF与数据库优先方法结合使用。更新EDMX文件时遇到问题。假设我有一个表InvoiceT和另一个表LookupT。现在,在InvoiceT中,我有一列InvoiceType与LookupT具有FK关系。现在,实体在InvoiceT类中创建了名为LookupT的导航属性。到目前为止,还不错。

现在,我添加了另一列名为InvoiceStatus的列,并添加了带有LookupT的FK。现在,实体创建了另一个名为LookupT1的导航属性。但是这里的问题是,第一个导航属性LookupT没有指向其原始数据,即InvoiceType。相反,它现在指向InvoiceStatus数据。有人可以向我解释为什么它会这样,我该怎么办?

public class InvoiceT
{
    public int InvoiceId {get;set;}
    public int InvoiceStatusLkpId {get;set;}
    public int InvoiceTypeLkpId {get;set;}
    public virtual LookupT LookupT {get;set;}    // Previously pointing to Type. Now to Status.
    public virtual LookupT LookupT1 {get;set;}    // Pointing to Type

}

public class LookupT
{
    public int LookupId {get;set;}
    public string LookupValue {get;set}
    public virtual ICollection<InvoiceT> InvoiceT {get;set;}
    public virtual ICollection<InvoiceT> InvoiceT1 {get;set;}
}

1 个答案:

答案 0 :(得分:2)

所以我找出了问题所在。似乎当EF创建导航属性时,它按FK关系名称的顺序执行此操作,即,如果我有两个名称分别为RelationA和RelationB的FK关系,则将首先创建RelationA的导航属性,然后再创建RelationB。在我的场景中,我的类型和状态的关系名称分别是“ FK_InvoiceT_LookupT_InvoiceTypeLkpId”和“ FK_InvoiceT_LookupT_InvoiceStatusLkpId”(SQL设计器会自动生成),并且EF首先为该关系生成了导航属性,该属性随后添加并弄乱了我的订购。因此,我要做的就是更新关系名称,以便按顺序添加关系名称,一切开始正常进行。