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

Как я могу увидеть ожидающие изменения Entity Framework?

Я создаю приложение с ADO.NET Entity Framework.

Я могу выполнить мой код поочередно во время отладки и просматривать SQL Server Profiler для каждого выполненного запроса, но я не могу понять, откуда все эти команды SQL:

Иногда, когда я выполняю SaveChanges(), Entity Framework выполняет неожиданные, странные INSERTS. Иногда они прерывают приложение. Я не могу понять, что я делаю, чтобы вызвать их.

Как я могу отслеживать ожидающие изменения, ожидающие очереди в ожидании вызова SaveChanges()?

4b9b3361

Ответ 1

Так как Entity Framework 5.0 DbContext имеет свойство ChangeTracker, которое имеет все ожидающие изменения. Подобно ObjectStateManager, вы можете получить объекты в разных состояниях следующим образом:

myDbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Added);
myDbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Deleted);
myDbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified);

Ответ 2

Взгляните на

myObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added)

здесь.

Ответ 3

Чтобы отслеживать события, когда сущности добавляются или удаляются из диспетчера состояний, вы можете использовать ObjectStateManagerChanged событие:

var ctx = new ModelContainer();

// ...

ctx.ObjectStateManager.ObjectStateManagerChanged += (sender, e) =>
{
   Trace.WriteLine(string.Format("{0}, {1}", e.Action, e.Element));
};

Ответ 4

Entity Framework 6 имеет метод, который действительно полезен.

dbContext.ChangeTracker.HasChanges()

Пример:

if (dbContext.ChangeTracker.HasChanges())
{
    db.SaveChanges();
}