コンテキスト全体ではなく単一のエンティティを保存する

c# entity-framework

質問

1対多関連の子エンティティの変更をデータベースに書き込む必要があるが、親エンティティに加えられた変更を保存しないというシナリオに遭遇しました。

Entity Frameworkは現在、コンテキストスコープ(EntityContext.SaveChanges())でデータベースコミットを処理します。これは、関係性を強制するのには理にかなっています。しかし、ベストプラクティスがあるかどうか粒度の高いデータベースは、コンテキスト全体ではなく個々のエンティティーにコミットします。

受け入れられた回答

ベストプラクティス? 「しないでください」という意味以外にもありますか。

ObjectContextをデータベースの状態とは異なるものにするためのベストプラクティスはないと思います。

あなたがこれをしなければならないならば、私は新しいObjectContextを新しくして、そこで子実体に変更を加えるでしょう。そのように、両方の文脈は一貫しています。


人気のある回答

私も同じようなニーズがあります。私が考えている解決策は、実際のエンティティプロパティに影響を与えずに、プロパティの変更を個人的に保存するすべてのエンティティにラッパープロパティを実装することです。次に、エンティティにSaveChanges()メソッドを追加してエンティティに変更を書き込み、コンテキストでSaveChanges()を呼び出します。

このアプローチの問題点は、すべてのエンティティをこのパターンに準拠させる必要があることです。しかし、それはかなりうまくいっているようです。大量のデータを含む多数のオブジェクトに大量の変更を加えると、メモリ内に余分なコピーが作成されてしまうという、別の欠点もあります。

私が考えることができる唯一の他の解決策は、変更を保存するとき、すべての変更/追加/削除されたエンティティのエンティティ状態を保存し、変更しているものを除いて未修正に設定し、変更を保存し、そして他のエンティティしかし、それは遅くなる可能性があります。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ