2012-02-23 71 views
1

我在一个ASP.NET WebForms应用程序中使用EF 4.3。我已经使用ObjectContext类型的上下文对象和POCO代码生成器(通过T4)开始使用模型优先方法。共享PKs和ObjectContext错误

在开始时,Context在每个服务方法的开始时创建。在处理性能时,我决定切换到每个Web请求的上下文。不幸的是我遇到了Table-per-Type继承的问题。我有两个实体:Offer和OfferEdit。他们处于一对一的关系,并且都拥有相同的主键。基本上,一个OfferEdit(OfferEdits表)在创建一个Offer后被创建。

我在Web请求期间多次查询特定Offer实体的上下文。错误我在尝试执行:

var offer = Context.Offer.Where(o => o.Id == offerId).FirstOrDefault() 

当这个提议已经被加载到Context.Offer.EntitySet是

在EntitySet的“RuchEntities.Offer”的所有对象必须具有唯一的主键。然而,类型'Ruch.Data.Model.OfferEdit'的实例和类型'Ruch.Data.Model.Offer'的实例都具有相同的主键 值'EntitySet = Offer; Id = 4139'。

将感谢所有的建议。

回答

0

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

+0

我的应用程序在一年内一直没有任何问题。根据Web请求解决方案切换到上下文后,我遇到了问题。 – muzieh 2012-02-23 11:55:43