Убедитесь, что Entity Framework всегда читает из базы данных? - PullRequest
4 голосов
/ 06 октября 2010

У меня есть это приложение, которое на самом деле представляет собой два приложения: веб-приложение и консольное приложение. Консольное приложение используется в качестве запланированной задачи на компьютере с ОС Windows и выполняется 3 раза в день для повторяющейся работы. Оба приложения используют одну и ту же модель и репозиторий, который помещен в отдельный проект (библиотека классов). Проблема в том, что если консольное приложение должно внести некоторые изменения в базу данных, оно обновляет сущность модели и сохраняет изменения в базе данных, но когда это происходит, контекст в веб-приложении не знает об этом, и поэтому контекст объекта не обновляется с помощью новые / обновленные данные и пользователь приложения не может видеть изменения.

Мой вопрос таков: есть ли способ указать объектному контексту всегда загружать данные из базы данных, либо по объектному контексту дыры, либо для конкретного запроса?

/ С уважением Винблад

Ответы [ 4 ]

2 голосов
/ 07 октября 2010

Я не думаю, что у вас должна быть эта проблема в веб-приложении. ObjectContext в веб-приложении должен создаваться для каждого запроса, поэтому затрагивается только обработка запросов во время обновления.

В любом случае есть несколько методов, которые могут заставить ObjectContext перезагрузить данные. Запросы и функции загрузки позволяют передавать MergeOption, который должен иметь возможность перезаписывать текущие данные. Но самым интересным должен быть метод Refresh, особенно с этим приложением .

1 голос
/ 20 сентября 2016

Используя DbSet, вы также можете использовать метод .AsNoTracking ().

1 голос
/ 06 октября 2010

Всякий раз, когда вы запускаете что-то вроде

context.Entities.FirstOrDefault()

или какой-либо запрос к контексту, данные фактически извлекаются из базы данных, поэтому у вас не должно быть проблем.

Какова ваша ObjectContext продолжительность жизни в веб-приложении? ObjectContext - это UnitOfWork, поэтому его следует создавать только для извлечения / записи / обновления данных и быстрого удаления после этого. Подобный вопрос вы можете найти здесь:

Обновить ObjectContext или пересоздать его, чтобы отразить изменения, внесенные в базу данных?

0 голосов
/ 30 июня 2014

FWIW, создание нового (анонимного) объекта в запросе также вызывает возврат к базе данных:

' queries from memory    
context.Entities.FirstOrDefault()

' queries from db
context.Entities.Select(Function(x) New With {p.ID, p.Name}).FirstOrDefault()

Пожалуйста, простите VB, это мой родной язык :)

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