Entity Framework 5 - DbContext имеет изменения?
Я пытаюсь найти способ определить, какие изменения были внесены в контекст базы данных (DbContext). Примечание. Я использую Visual Studio 2012 с Entity Framework 5 в 64-разрядной коробке Windows.
Назад, когда я использовал ObjectContext вместо DbContext, я мог бы сделать что-то вроде:
public partial class MyObjectContext
{
public Boolean HasUnsavedChanges()
{
return (this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
}
}
Теперь, когда я использую DbContext, я попытался сделать это:
public partial class MyDbContext
{
public ObjectContext ObjectContext()
{
return (this as IObjectContextAdapter).ObjectContext;
}
public Boolean HasUnsavedChanges()
{
return (this.ObjectContext().ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
}
}
Проблема, с которой я столкнулась, заключается в том, что метод "HasUnsavedChanges()" всегда возвращает "false", даже когда я знаю, что контекст был изменен. У кого-нибудь есть идеи относительно того, что я делаю неправильно?
Ответы
Ответ 1
Вы должны использовать DbContext
ChangeTracker
:
public bool HasUnsavedChanges()
{
return this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added
|| e.State == EntityState.Modified
|| e.State == EntityState.Deleted);
}
Ответ 2
Я знаю, поскольку вы используете Entity Framework 5, этот ответ вам не поможет. Но это может помочь другим.
Начиная с Entity Framework 6, вы можете проверить изменения, просто следуя строке кода:
context.ChangeTracker.HasChanges()