Có cách nào để tìm hiểu xem có những thay đổi chưa được lưu trong ngữ cảnh thực thể của tôi không, trong Khuôn khổ thực thể?Kiểm tra xem có bất kỳ thay đổi đang chờ xử lý nào để được lưu
Trả lời
này có thể làm việc (nếu bằng cách thay đổi bạn có nghĩa là thêm vào, loại bỏ và sửa đổi các thực thể):
bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
) > 0;
Edit:
đang được cải thiện:
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
+1 nói chung là đi đúng hướng, nhưng sử dụng' Bất kỳ() ', không phải' Đếm()> 0'. –
Darn nó - chỉ cần đọc blogpost của bạn về điều này ngày hôm nay! Cảm ơn;) – Yakimych
Lưu ý rằng EF không kiểm tra nếu giá trị thực sự khác (đối với 'EntityState.Modified'). e.q. nếu bạn thay thế một giá trị, EF sẽ trả về '1 đối tượng đã sửa đổi'. Bạn phải kiểm tra trước nếu giá trị khác. –
Đối với những người bạn sử dụng EF 4+, đây là giải pháp tương đương như một phương pháp mở rộng:
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);
}
}
Lưu ý rằng bạn không thể kết hợp các giá trị dưới dạng mặt nạ bit. Hàm GetObjectStateEntries()
xử lý logic cho bạn, nhưng LINQ sẽ không tạo ra kết quả phù hợp.
Bắt đầu với EF 6, có context.ChangeTracker.HasChanges()
.
Hầu hết các câu trả lời cập nhật. – Zapnologica
Tính đến năm 2016, đây là câu trả lời, IMHO. – ozgur
Đây là câu trả lời hay nhất khi những người khác đã đề cập. – Yokomoko
context.savechanges() không tự động kiểm tra điều này? Lý do im yêu cầu là tôi nghĩ rằng một vài người sẽ cố gắng làm như sau: 'if (db.ChangeTracker.HasChanges()) {await db.SaveChangesAsync(); } ' – Zapnologica