Entity Framework 4.1 - Refresh не является членом Context - PullRequest
9 голосов
/ 23 октября 2011

Я пытаюсь отменить изменения контекста с помощью метода Context.Refresh, но кажется, что Refresh не является членом Context.

Я использую версию Microsoft ADO.NET Entity Framework 4.1 RC.

Есть идеи?

Ответы [ 3 ]

13 голосов
/ 23 октября 2011

Вы, вероятно, смотрите на DbContext, который не имеет метода Refresh. Вы можете использовать интерфейс IObjectContextAdapter, чтобы получить базовый ObjectContext, и вызвать Refresh для этого.

var objectContext = ((IObjectContextAdapter)context).ObjectContext;
2 голосов
/ 17 ноября 2011

Вы также можете использовать функцию «Перезагрузить» для прокси-объектов ... Вот пример для перезагрузки всех измененных объектов:

            var modifiedEntries = context.ChangeTracker.Entries()
                .Where(e => e.State == EntityState.Modified);
            foreach (var modifiedEntry in modifiedEntries) {
                modifiedEntry.Reload();
            }
0 голосов
/ 09 июня 2014

Ответ, опубликованный в этой теме, тоже может помочь: Обновить экземпляр сущности с помощью DbContext

В итоге, вы можете попробовать вызвать что-то вроде следующего:

dbContext.Entry(someEntityObjectInstance).Reload();

Однако, кто-то еще заметил, что это не обновляет свойства навигации, поэтому, если вам нужно беспокоиться и об обновлении свойств навигации, вам необходимо либо перезагрузить () все свойства навигации, либо отсоединить () или Refresh () после приведения к IObjectContextAdapter, или, возможно, просто воссоздайте свой DbContext.

В моем случае, я откровенно решил, что лучше всего просто воссоздать контекст и повторно найти () сущность:

dbContext = new Model.Entities();
someEntityObjectInstance = dbContext.SomeEntityType.Find(someEntityObjectInstanceKey);

Возможно, здесь нет простого / лучшего ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...