C# 具有导航属性的实体框架抽象类
我正在使用Entity Framework对现有应用程序进行一个小的架构更改,并试图使基类具有导航属性,但出于某种原因,EF一直尝试添加它两次,我不完全确定为什么 类结构设置为: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
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做了一些非常奇怪的事情
更奇怪的是,我在POCOPurchaseOrderProduct
实体上添加了PurchaseOrderProduct\u Id
作为属性,并将其标记为Ignore(p=>p.PurchaseOrderProduct\u Id)
,它仍然添加了它,而令人难以置信的是,当我将PurchaseOrderItem
中的外键引用添加到PurchaseOrderProduct
并将它们从PurchaseOrderItem
中删除时,我重新运行了单元测试,它突然在寻找肯定不存在的PurchaseOrderItem\u Id2
。
不幸的是,我认为我必须将这归因于EF在内部某个地方遇到了问题,并提出了另一种解决方案。我们在这个系统中使用了大量的一对一关系,但从来没有任何抽象基类具有导航属性。总是继承类具有指定的属性。它只是有一些标准的通用属性(字符串和整数)。没有导航属性或类似的属性。非常基本的POCO类。