2012-02-23 6 views
1

私はASP.NET WebFormsアプリケーションでEF 4.3を使用しています。私は、ObjectContext型とPOCOコードジェネレータのコンテキストオブジェクト(T4経由)でモデルの最初のアプローチを開始しました。共有PKとObjectContextエラー

最初に、コンテキストはすべてのサービスメソッドの始めに作成されました。パフォーマンスに取り組んでいるうちに、Webリクエストごとにコンテキストに切り替えることにしました。残念ながら、私はテーブルごとの継承に関する問題に遭遇しました。 OfferとOfferEditの2つのエンティティがあります。これらは1対1の関係にあり、両方とも同じ主キーを共有します。オファーが編集されると、OfferEdit(OfferEditsテーブル)が作成されます。

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とまったく同じように動作することを明確にするために、エンティティはOfferまたはOfferEditのいずれかのタイプになります。 OfferEditOfferに変換できますが、まだOfferEditです。どちらのタイプのものであってもかまいません。OfferエンティティはIdと同じです。OfferEditエンティティと同じです.2つのエンティティインスタンスで同じキーを使用できないためです。 OfferのインスタンスをOfferEditに変更することは決してできません.Netでは既存のインスタンスのタイプを変更できないためです。

+0

私のアプリケーションは1年間問題なく動作しています。 Web要求ソリューションごとのコンテキストに切り替えた後に問題が発生しました。 – muzieh

関連する問題