保存する保留中の変更があるかどうかを確認してください
質問
エンティティフレームワークで、私のエンティティコンテキストに救われていない変更があるかどうかを調べる方法はありますか?
解決
これは機能する可能性があります(変更により追加、削除、修正されたエンティティを意味する場合):
bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
) > 0;
編集:
改善されたコード:
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
他のヒント
EF 6から始まります context.ChangeTracker.HasChanges()
.
EF 4+を使用している人のために、拡張方法と同等のソリューションを次に示します。
public static class DbContextExtensions {
public static Boolean HasPendingChanges(this DbContext context) {
return context.ChangeTracker.Entries()
.Any(e => e.State == EntityState.Added
|| e.State == EntityState.Deleted
|| e.State == EntityState.Modified);
}
}
値を少しマスクとして結合することはできないことに注意してください。関数 GetObjectStateEntries()
ロジックを処理しましたが、LINQは適切な結果を生み出しません。
所属していません StackOverflow