Как просмотреть набор сущностей и незафиксированные изменения? - PullRequest
2 голосов
/ 19 апреля 2011

Я использую EF4 и при отладке хочу посмотреть, какие изменения будут внесены в базу данных. Например, если я добавлю несколько новых объектов, таких как контакты, я хочу увидеть список контактов, которые будут добавлены при выполнении .SaveChanges (). Аналогичным образом, если будут происходить удаления, было бы неплохо посмотреть, что будет удалено.

Есть ли в VS2010 визуализатор или аналогичный инструмент, который это делает?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Я использую этот код для уведомления ожидающих изменений, это может быть полезно (context является переменной для ModelContext):

var changes = new[] { EntityState.Added, EntityState.Deleted, EntityState.Modified }
    .SelectMany(state => context.ObjectStateManager.GetObjectStateEntries(state)
                            .Select(entry => new
                                     {
                                   NewState = state.ToString(),
                                   EntitySetName = entry.EntitySet.Name,
                                   Object = ((entry.Entity == null) ? "<n/a>" : entry.Entity.ToString()),
                                   IsRelation = entry.EntitySet.Name.StartsWith("FK_"),
                                     }))
            .OrderBy(x => x.IsRelation ? 1 : 0)
            .Select(x => string.Format("{0} ({1}): {2}", x.NewState, x.EntitySetName, x.Object))
            .ToArray();

После этого вы можете агрегировать эту строку и показывать MessageBox или уведомлять пользователя, как вы это делаете в своем приложении (например, выводить в какое-то текстовое поле, например «Выход»)

2 голосов
/ 19 апреля 2011

Это не видно напрямую.Лучшее место - чек ObjectStateManager, который содержит записи о состоянии для каждой сущности и независимой ассоциации.Каждый ObjectStateEntry представляющий объект имеет заполненное свойство Entity.

Редактировать:

Предыдущее описание полезно, если вы хотите получить доступ к этим данным в коде.Если вы просто хотите увидеть его в отладчике, добавьте context.ObjectStateManager в окно просмотра и перейдите к элементам Non-Public.Вы увидите следующие поля:

  • _addedEntityStore
  • _deletedEntityStore
  • _modifiedEntityStore
...