Ответ 1
var addedStateEntries = Context
.ObjectStateManager
.GetObjectStateEntries(EntityState.Added);
Я хочу узнать, есть ли несохраненные данные в контексте инфраструктуры сущности. Я выяснил, как использовать ObjectStateManager для проверки состояний существующих объектов, но есть две проблемы, которые у меня есть.
Мне не удалось найти ответ на этот вопрос в моих поисках в msdn, поэтому я надеялся, что кто-то из вас сможет понять меня.
Спасибо заранее.
var addedStateEntries = Context
.ObjectStateManager
.GetObjectStateEntries(EntityState.Added);
Через метод расширения (для каждого объекта ObjectContext):
internal static class ObjectContextExtensions
{
public static bool IsContextDirty(this ObjectContext objectContext)
{
return objectContext
.ObjectStateManager
.GetObjectStateEntries(
EntityState.Added |
EntityState.Deleted |
EntityState.Modified).Any();
}
}
или с помощью частичного метода (только для вашего объекта ObjectContext):
partial class MyModel
{
public bool IsContextDirty()
{
return ObjectStateManager
.GetObjectStateEntries(
EntityState.Added |
EntityState.Deleted |
EntityState.Modified).Any();
}
}
Простой способ получить одноразовый метод/свойство многократного использования, вы можете добавить новый метод в свой ObjectContext, создав неполный класс и добавив свойство, подобное этому:
public partial class MyEntityContext
{
public bool IsContextDirty
{
get
{
var items = ObjectStateManager.GetObjectStateEntries(EntityState.Added);
if(items.Any())
return true;
items = ObjectStateManager.GetObjectStateEntries(EntityState.Deleted);
if (items.Any())
return true;
items = ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
if(items.Any())
return true;
return false;
}
}
}
В зависимости от того, что вы ищете, вы можете открыть другие свойства, чтобы узнать, есть ли только удаленные или измененные. Этот метод можно было бы упростить, но я хотел, чтобы было ясно, что вам нужно делать.
В этой статье описывается, что именно необходимо для выполнения отслеживания изменений в платформе Entity Framework:
Разрешение идентичности, Управление состоянием и Отслеживание изменений (Entity Framework) - MSDN