Подтвердить что ты не робот

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", даже когда я знаю, что контекст был изменен. У кого-нибудь есть идеи относительно того, что я делаю неправильно?

4b9b3361

Ответ 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()