Проверьте, есть ли какие-либо оставленные изменения, которые будут сохранены
Вопрос
Есть ли способ узнать, есть ли несохраненные изменения в моем контексте сущности, в рамках объекта?
Решение
Это может работать (если изменения, которые вы имеете в виду добавленные, удаленные и модифицированные объекты):
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