2011-01-28 12 views
0

エンティティフレームワークの中で複数のコンテキストをスピンアップ回避する方法:エラーで次のコードを実行しようとすると、エンティティフレームワークで

 using (MyEntities ctx = new myEntities()) 
     { 
      Entity.Customers.Build buildId = new ctx.Build(); 
      buildId.CustomerService = customerService; 
      buildId.datCreatedDate = DateTime.Now; 
      buildId.strBuildSchema = schema; 
      buildId.Status = "Success"; 
      ctx.AddToBuilds(buildId); 
      ctx.SaveChanges(); 
     } 

結果「エンティティオブジェクトがIEntityChangeTrackerの複数のインスタンスによって参照することはできません」。

私が言うことができる限り、作成しているビルドオブジェクトは、AddToBuilds()ステートメントを実行するコンテキストとは異なるEntity Frameworkコンテキストの新しいインスタンスに由来しています。

しかし、私はこの問題をどのように回避するかを考え出すことはできません。上記のコードでEntityコンテキストオブジェクト(つまりctx)のインスタンス化から新しいBuild直接を作成できないようですか?これを行う方法はありますか、別の明らかな回避策がありませんか?

乾杯、 マット

答えて

0

問題は、あなたが上記のコードに示されていない、1つのコンテキストに添付されたエンティティを関連付けていること(customerService?)ctxに装着されている別のエンティティ、buildId、です。それをしないでください。一度に1つのコンテキストを使用します。

0

「customerService」(またはおそらく「スキーマ」)が別のEntityTrackerに属しています。この取り除くための最も簡単な方法は、たCustomerService(ノート、ここでたCustomerServiceのクラス名についての仮定を作る)にロードされたコードに次のコード行を追加することです:

ctx.CustomerService.MergeOptions = MergeOptions.NoTracking; 

このコード行コンテキストに「私はCustomerServiceオブジェクトに何も変更を加えるつもりはないので、それを追跡するのは気にしない」と伝えます。

関連する問題