Entity Framework 4.1 - Как заставить EF перейти в БД вместо использования Graph? - PullRequest
6 голосов
/ 12 октября 2011

Вот сценарий, у меня есть веб-сайт, который в одном HTTP-запросе (HTTP POST), мне нужно сделать следующее:

  1. Возьмите объект (скажем, "Tag")
  2. Сохранить какой-нибудь другой объект (скажем, «Вопрос»)
  3. Получите свежую копию "Tag".
  4. Переадресация на другую страницу, для которой требуется свежая копия «Tag».

За кулисами 2) используются триггеры на стороне базы данных, которые влияют на данные в «теге».

Поэтому, когда я делаю 3), EF извлекает ту же копию объекта из шага 1), поскольку она находится в графе / внутренней памяти (например, в том же соединении / контексте)

Мне нужна «свежая» копия объекта.

В прошлом я использовал Detach, затем я выполняю запрос EF, и последний объект извлекается из БД.

Но у меня здесь нет доступа к объекту per se (у меня есть DTO, который возвращается из моего хранилища), поэтому мне нечего передавать методу Detach.

Есть ли способ сказать:

var fresh = db.Tags.Find(1, ignoreGraph: true)

Или есть другая альтернатива?

Как уже упоминалось, я нахожусь на Entity Framework 4.1, C # 4 (и ASP.NET MVC 3)

Единственное решение, которое я вижу сейчас, - это передать параметр строки запроса на следующую страницу, которая затем получает свежую копию (поскольку это новый контекст, новый граф и т. Д.).

1 Ответ

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

Нашел мой ответ, я думаю:

Context.Entry<T>(entity).Reload()

Пытаюсь сейчас ...

...