Entity Framework 交换导航属性

Entity Framework swaps navigational properties

我正在使用 EF 和 DB 优先方法。我在更新 EDMX 文件时遇到问题。假设我有一个 table InvoiceT 和另一个 table LookupT。现在,在 InvoiceT 中,我有一个与 LookupT 具有 FK 关系的 InvoiceType 列。现在实体在 InvoiceT class 中创建一个名为 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;}
}

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