C# 具有导航属性的实体框架抽象类

C# 具有导航属性的实体框架抽象类,c#,entity-framework-6,C#,Entity Framework 6,我正在使用Entity Framework对现有应用程序进行一个小的架构更改,并试图使基类具有导航属性,但出于某种原因,EF一直尝试添加它两次,我不完全确定为什么 类结构设置为: public abstract class PurchaseOrderItem { //foreign key reference public long PurchaseOrderId { get; set; } //parent entity public virtual

我正在使用Entity Framework对现有应用程序进行一个小的架构更改,并试图使基类具有导航属性,但出于某种原因,EF一直尝试添加它两次,我不完全确定为什么

类结构设置为:

public abstract class PurchaseOrderItem
{
     //foreign key reference
     public long PurchaseOrderId { get; set; }

     //parent entity
     public virtual PurchaseOrder PurchaseOrder { get; set; }
}

public class PurchaseOrderProduct : PurchaseOrderItem
{
    //general properties that a PurchaseOrderItem doesn't have
}

public class PurchaseOrder
{
    //navigation property to items, which will include purchase order products
    public virtual ICollection<PurchaseOrderItem> Items { get; set; }
}
公共抽象类PurchaseOrderItem
{
//外键引用
公共长PurchaseOrderId{get;set;}
//母实体
公共虚拟采购订单采购订单{get;set;}
}
公共类PurchaseOrderProduct:PurchaseOrderItem
{
//PurchaseOrderItem没有的常规属性
}
公共类购买订单
{
//项目的导航属性,其中将包括采购订单产品
公共虚拟ICollection项{get;set;}
}
PurchaseOrderItem
上的导航属性设置为:

public abstract class PurchaseOrderItem
{
     //foreign key reference
     public long PurchaseOrderId { get; set; }

     //parent entity
     public virtual PurchaseOrder PurchaseOrder { get; set; }
}

public class PurchaseOrderProduct : PurchaseOrderItem
{
    //general properties that a PurchaseOrderItem doesn't have
}

public class PurchaseOrder
{
    //navigation property to items, which will include purchase order products
    public virtual ICollection<PurchaseOrderItem> Items { get; set; }
}
HasRequired(p=>p.PurchaseOrder)。带有许多(p=>p.Items)。HasForeignKey(p=>p.PurchaseOrderId)

数据库结构是一对一的关系,正如
PurchaseOrderProduct
中的实际配置设置一样。当SQL查询按实体框架运行时,它包括
PurchaseOrderItem
上预期的默认
PurchaseOrderId
键,但随后它还包括针对
PurchaseOrderProduct
表的
PurchaseOrderId
,它失败了,因为它不存在,因为它与基类关联,并且故意不在继承的类上

以前有没有其他人遇到过这种情况和/或有什么建议?这似乎很简单

**更新**

我开始进一步研究这个问题,通过创建名为
TestPOItem
TestPOItemProduct
的新类来模拟这种结构,但这导致了另一个问题,即
TestPOItem
PurchaseOrderItem
无法配置为映射到
PurchaseOrderItems
(一个不存在且未配置的表)进一步让EF做了一些非常奇怪的事情

更奇怪的是,我在POCO
PurchaseOrderProduct
实体上添加了
PurchaseOrderProduct\u Id
作为属性,并将其标记为
Ignore(p=>p.PurchaseOrderProduct\u Id)
,它仍然添加了它,而令人难以置信的是,当我将
PurchaseOrderItem
中的外键引用添加到
PurchaseOrderProduct
并将它们从
PurchaseOrderItem
中删除时,我重新运行了单元测试,它突然在寻找肯定不存在的
PurchaseOrderItem\u Id2


不幸的是,我认为我必须将这归因于EF在内部某个地方遇到了问题,并提出了另一种解决方案。我们在这个系统中使用了大量的一对一关系,但从来没有任何抽象基类具有导航属性。总是继承类具有指定的属性。

它只是有一些标准的通用属性(字符串和整数)。没有导航属性或类似的属性。非常基本的POCO类。