0

エンティティ フレームワーク シナリオで DTO とコンバーターを使用しています。エンティティを更新したい。だから私はこのステートメントを入れます: databasecontext.Tablename(s).Attach(entityobj); ここに来るたびに、プログラムはこのエラーで終了します: An entity with the same identity already exists in this EntitySet.

databasecontext.Tablename(s).Detach(entityobj); もう一度アタッチに電話する前に言うことで、これを回避できると感じまし た。しかし、プログラムは依然として Attach ステートメントで失敗します。

私は何が欠けていますか?ドメイン サービスで Update を呼び出す DB コンテキストのメソッドはどれですか?

4

2 に答える 2

1

質問は明確ではありません。データベース コンテキストが存続する期間と、エンティティをいつコンテキストにロードしたかについては言及していません。

しかし、あなたの質問に基づいて、エンティティをロードしてDTOとしてどこかに渡し、DTOが返されたときに同じコンテキストを使用していると思います。DTO をエンティティに変換し、再度アタッチしようとしています => BANG 例外。同じエンティティをコンテキストに 2 回配置することはできません。代わりに ObjectContext.ApplyCurrentValues (EF 4.0) または ApplyPropertyChanges (EF 1.0) を使用してみてください。

于 2010-10-02T09:57:25.540 に答える
0

変更を行っている間、コンテキストを開いたままにしているようです。

その場合、オブジェクトをコンテキストに再アタッチする必要はありません。

コンテキストを開く場合は、コンテキストからオブジェクトを取得してから、コンテキストを閉じ、オブジェクトに変更を加えてから、新しいコンテキストを開きます。この場合、オブジェクトをコンテキストにアタッチする必要があります。

于 2010-10-02T09:54:19.697 に答える