我在ASP.NET WebForms应用程序中使用EF 4.3。我已经开始使用类型为ObjectContext和POCO代码生成器的上下文对象的模型第一种方法(通过T4)。
在开始时,Context是在每个服务方法的开头创建的。在处理性能时,我决定切换到每个Web请求的上下文。不幸的是,我遇到了Table-per-Type继承的问题。我有两个实体:Offer和OfferEdit。它们处于一对一的关系中,并且两者共享相同的主键。基本上,一旦Offer正在编辑,就会创建OfferEdit(OfferEdits表)。
我在Web请求期间多次查询特定Offer实体的上下文。我试图执行的错误:
var offer = Context.Offer.Where(o => o.Id == offerId).FirstOrDefault()
此商品已加载到Context.Offer.EntitySet
EntitySet'RuchEntities.Offer'中的所有对象必须具有唯一的主键 但是,类型为“Ruch.Data.Model.OfferEdit”的实例和类型为“TheRuch.Data.Model.Offer”的实例都具有相同的主键 值, '的EntitySet =发售,ID = 4139'。
将欣赏所有建议。
答案 0 :(得分:0)
听起来你在滥用TPT继承。为了清楚起见,EF继承的工作原理与.NET完全相同 - 实体可以是Offer
或OfferEdit
类型。您可以将OfferEdit
转换为Offer
,但它仍然是OfferEdit
。它永远不会是两种类型,这意味着您永远不会有Offer
实体Id
与OfferEdit
实体相同,因为两个实体实例不能使用相同的密钥。您也永远不能将Offer
的实例更改为OfferEdit
,因为.NET不允许您更改现有实例的类型。