共享PK和ObjectContext错误

时间:2012-02-23 10:42:43

标签: asp.net entity-framework

我在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'。

将欣赏所有建议。

1 个答案:

答案 0 :(得分:0)

听起来你在滥用TPT继承。为了清楚起见,EF继承的工作原理与.NET完全相同 - 实体可以是OfferOfferEdit类型。您可以将OfferEdit转换为Offer,但它仍然是OfferEdit。它永远不会是两种类型,这意味着您永远不会有Offer实体IdOfferEdit实体相同,因为两个实体实例不能使用相同的密钥。您也永远不能将Offer的实例更改为OfferEdit,因为.NET不允许您更改现有实例的类型。