Arhn - архитектура программирования

Entity Framework 4.1 - Как заставить EF перейти в БД вместо использования графика?

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

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

За кулисами 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).

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


  • возможный дубликат stackoverflow.com/questions/7639219/ 12.10.2011
  • @nathan - возможно, но ответ там не поможет, так как у меня нет доступа к объекту umbrella (или объекту tag здесь) для вызова context.Refresh(RefreshMode.StoreWins,umbrella). 12.10.2011
  • а еще это EF4, а не EF4.1. Похоже, что метод Refresh был удален из DbContext. 12.10.2011
  • @nathan - да, это сработало бы (см. мой ответ ниже), но ему нужен доступ к объекту, как и Detach. 12.10.2011

Ответы:


1

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

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

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

12.10.2011
  • У меня нет доступа к entity, только dtoEntity. 12.10.2011
  • Если вы хотите обновить объект, вы должны знать, какой объект обновлять, не так ли? Если вы знаете ключ объекта, вы все равно можете найти его в отслеживании изменений и после этого перезагрузить его. 12.10.2011
  • @Ladislav, у меня есть уникальный индекс, а не сущность. Например, я делаю Find().SingleOrDefault(x => x.UniqueUri == someUri). 12.10.2011
  • Тем не менее, это уникальная идентификация, поэтому вы должны быть в состоянии найти объект в context.ChangeTracker.Entries<EntityType>().Select(e => e.Entity).FristOrDefault(...) - единственное, что вам нужно сделать сейчас, это уникальная идентификация и тип объекта. 12.10.2011
  • @Ладислав - да, думаю, я мог бы это сделать. Просто означает, что мне нужно передать больше логики EF в интерфейс моего репозитория. Нет другого варианта, я думаю. 12.10.2011
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..