Вот сценарий: у меня есть веб-сайт, который в одном HTTP-запросе (HTTP POST) мне нужно сделать следующее:
- Возьмите объект (скажем, «Тег»)
- Сохраните какой-нибудь другой объект (скажем, «Вопрос»)
- Получите свежую копию «Tag».
- Перенаправление на другую страницу, для которой требуется свежая копия «Тега».
За кулисами 2) используются триггеры на стороне базы данных, которые влияют на данные в «теге».
Итак, когда я делаю 3), EF извлекает ту же копию объекта из шага 1), поскольку он находится в графе/внутренней памяти (например, в том же соединении/контексте)
Мне нужна "свежая" копия объекта.
Раньше я использовал Detach
, затем выполнял запрос EF и последний объект извлекался из БД.
Но у меня нет доступа к объекту здесь как таковому (у меня есть DTO, который возвращается из моего репозитория), поэтому мне нечего передать методу Detach
.
Есть ли способ сказать:
var fresh = db.Tags.Find(1, ignoreGraph: true)
Или есть другая альтернатива?
Как уже упоминалось, я использую Entity Framework 4.1, С# 4 (и ASP.NET MVC 3).
Единственное решение, которое я вижу прямо сейчас, - это передать параметр строки запроса на следующую страницу, которая затем захватит новую копию (поскольку это новый контекст, новый график и т. д.).
entity
, толькоdtoEntity
. 12.10.2011Find().SingleOrDefault(x => x.UniqueUri == someUri)
. 12.10.2011context.ChangeTracker.Entries<EntityType>().Select(e => e.Entity).FristOrDefault(...)
- единственное, что вам нужно сделать сейчас, это уникальная идентификация и тип объекта. 12.10.2011