Как я могу увидеть ожидающие изменения Entity Framework?
Я создаю приложение с ADO.NET Entity Framework.
Я могу выполнить мой код поочередно во время отладки и просматривать SQL Server Profiler для каждого выполненного запроса, но я не могу понять, откуда все эти команды SQL:
Иногда, когда я выполняю SaveChanges()
, Entity Framework выполняет неожиданные, странные INSERTS. Иногда они прерывают приложение. Я не могу понять, что я делаю, чтобы вызвать их.
Как я могу отслеживать ожидающие изменения, ожидающие очереди в ожидании вызова SaveChanges()
?
Ответы
Ответ 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();
}