2012-02-23 38 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