2011-11-14 1 views
0

オブジェクトが添付されていないと確信していてもオブジェクトを追加できません。別のコンテキストEF4は、添付されていないと確信していても、コンテキストにオブジェクトを追加できません。

私はPOCOオブジェクトでEF 4を使用しています。私は

_currentContext.ObjectStateManager.GetObjectStateEntry(entityIn) 

をしようとした場合

は、その後、私はそれがありません十分な

The ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of type 'System.Data.Entity.DynamicProxies.OrderItem_7D361CB49D75AA90681B4BA3F924139ECB0FC1426E38E90C7B884A4E9CD777DF'. 

フェアエラーが発生します。私はそれを

_currentContext.AttachTo("OrderItems", entityIn) 

を添付しようとするのであればそれから私はどのように私は両方のエラーを取得することができます

An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 

を取得します。彼らは矛盾しない?どのように私は文脈にそれを付けることができますか?

編集

アプリ全体で一つだけのコンテキストがあります。パターンは

  1. です。リポジトリオブジェクトによるすべての呼び出しです。
  2. オブジェクトは、そのオブジェクトコンテキストをファクトリクラスから取得します。
  3. このファクトリクラスので、あなたはコンテキストオブジェクトの2つのインスタンスのハッシュコードを取る場合にのみコンテキストが1つの任意の時点でのページのライフサイクル

のために使用されている保証コンテキストを作成したり、要求オブジェクトからコンテキストを取得し、いずれかそれぞれが同じです。

+1

OrderItem(または他のエンティティ)を参照しようとしましたが、同じキーを持つOrderが既に添付されていますか?それから、このような問題が発生する可能性があります:http://stackoverflow.com/questions/7938728/objectstatemanager-trygetobjectstateentry-returns-false-for-attached-object/7938909#7938909 – Slauma

+0

Order @Slaumaの良い推測です。私のスキーマ(ジョーク)を見たことがありますか?おそらくそれはおかげです。しかし、これは、根本的な注文が既に添付されている場合に、この問題を引き起こす可能性がある場合、どのように注文アイテムを添付することができるかを考えています。私は何か明白なものを欠いているのですか –

+0

添付されたOrderがOrderItemによって参照されるOrderと同じオブジェクトであれば問題ありません。しかし、このエラーは、あなたが接続されているOrder(hash = x、key = 1)と同じキー(hash = y、key = 1)を持つ別のOrderオブジェクトを持っていることを示します。これをお持ちの場合、基本的には、(OrderItemで参照されている)分離されたOrderを添付されたOrderで置き換えるか、OrderItemからOrderへの参照をnullに設定する必要があります。私の推測も間違っている可能性があります。もし 'IEntityChangeTracker'の複数のインスタンスに関するこのエラーが本当に私のリンクされた答えと同じ理由を持っているのかどうかはわかりません。 – Slauma

答えて

2

オブジェクトentityInはおそらく別のコンテキストにあるオブジェクトへの参照を持っています。

ただし、実際のの問題は、範囲に複数のコンテキストがあることです。それを行うにはハードです。 Webアプリケーションでは、要求ごとに1つのコンテキストが必要です。

+2

私はすべての私のリポジトリへの要求ごとに単一のコンテキストを提供するためにNinjectを使用します。魅力のように動作します。しかし、IoCコンテナはその仕事をしなければなりません。 –

+0

コメントありがとう@Craig Stuntz。アプリケーションでは、あなたが提案したように、要求オブジェクトに関連付けられたコンテキストは1つだけです。私はこれをより明確にするために質問を編集しました –

+0

"IEntityChangeTrackerの複数のインスタンスによって"エラーが発生した場合、**複数のコンテキストが含まれます。*期間。*このエラーは何も意味しません。それを引き起こすのはただ1つだけです。別のコンテキストにあるオブジェクトが 'entityIn'ではないということだけです。 'entityIn'が関連付けられているオブジェクトです。 –

関連する問題