Как сказать, грязны ли какие-либо объекты в контексте с.Net Entity Framework 4.0

Я хочу смочь сказать, существуют ли какие-либо несохраненные данные в контексте платформы объекта. Я выяснил, как использовать ObjectStateManager для проверки состояний существующих объектов, но существует две проблемы, которые я имею с этим.

  1. Я предпочел бы, чтобы единственная функция звонила, чтобы видеть, не сохраняются ли какие-либо объекты вместо цикличного выполнения хотя все объекты в контексте.
  2. Я не могу выяснить, как обнаружить объекты, которые я добавил. Это предлагает мне, чтобы я не полностью понимал, как контекст объекта работает. Например, если у меня есть ObjectSet myContext. Сотрудники, и я добавляю нового сотрудника к этому набору (с.AddObject), я не вижу новый объект, когда я смотрю на ObjectSet, и я также не вижу, что.Count увеличивается. Однако, когда я делаю контекст. SaveChanges (), мой новый объект сохраняется... ха?

Я не мог найти ответ на это в моих поисках MSDN, таким образом, я надеялся, что кто-то здесь сможет к подсказке меня в.

Заранее спасибо.

21
задан Mike Gates 26 April 2010 в 15:53
поделиться

3 ответа

var addedStateEntries = Context
    .ObjectStateManager
    .GetObjectStateEntries(EntityState.Added);
15
ответ дан 29 November 2019 в 21:17
поделиться

В этой статье точно описано, что необходимо для отслеживания изменений в Entity Framework:

Разрешение удостоверений, управление состоянием и Отслеживание изменений (Entity Framework) - MSDN

3
ответ дан 29 November 2019 в 21:17
поделиться

Простой способ получить один многократно используемый метод / свойство. Вы можете добавить новый метод в свой 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;
    }
  }
}

В зависимости от того, что вы ищете, вы можете предоставить другие свойства для знать, есть ли просто удаления или модификации. Этот метод можно упростить, но я хотел, чтобы было понятно, что вам нужно делать.

6
ответ дан 29 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: