DBContextのChangetrackerの問題
-
25-10-2019 - |
質問
CodeFirst EF-4.1ベースのプログラムがあります。ユーザーはコンテキストを取得し、一部のプロパティを変更できます。ユーザーが完了したら、私は簡単にやります
ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);
aのかどうかを判断します SaveChanges()
必要かどうか。 「SaveChanges()」の呼び出しを行うと、データベースに加えられた変更が持続します。
これは一部のプロパティで機能し、他のプロパティでは機能しません。具体的には、単純なタイプで動作するようです(float
s)、およびコレクション階層(ObservableCollection
s)。
私は何か間違ったことをしていますか?
解決
はい、これは問題です。いくつかの関係は追跡されていません DbChangeTracker
. 。には違いがあります 独立協会と外国キー協会. 。関係の変更は、次の場合に追跡されます。
- efv4+の常に外部キー関連である1対1の関係
- 外国のキー協会との1対多くの関係 - 外部キープロパティを設定する必要があります
関係の変更は、次の場合に追跡されません。
- 独立協会との1対多い関係
- 常に独立した関連性である多くの多くの関係
独立した協会のために追跡されていないことは、正しい命名ではありません。これらの変更は追跡されますが DbChangeTracker
これらの変更へのアクセスを公開しません!変換する必要があります DbContext
に ObjectContext
そして使用します ObjectStateManager
アクセスするため ObjectStateEntries
独立した協会を表す。
この場合、最も簡単なことは単に呼び出すことです SaveChanges
いつも。データを保存する必要がない場合、DBコマンドは実行されません。
所属していません StackOverflow