Подтвердить что ты не робот

Entity Framework: определение внешних изменений в базе данных

У меня есть хранимая процедура, которая меняет много данных в базе данных. Эта хранимая процедура вызывается из приложения, которое в то же время использует EF для операций с данными.

Итак, я нажимаю кнопку, хранимая процедура запускается в базе данных, данные изменяются, а EF показывает старые данные пользователю.

Есть ли способ заставить DbContext или ObjectContext обновлять данные из базы данных? ObjectContext.Refresh() может быть решением, но я не хочу вызывать этот метод для каждой отдельной таблицы, которая может быть изменена. Я хочу, чтобы все таблицы были обновлены за один шаг.

Я использую Entity Framework 5, ориентируясь на .NET 4.0

EDIT: добавлены данные, но изменение существующих данных не отражается EF. Я вижу недавно добавленные записи, но я не вижу изменений, которые я внес в существующие записи.

4b9b3361

Ответ 1

Ваш DbContext должен быть недолговечным. Создайте его, запустите свой запрос и удалите его.

using (var context = new MyProject.DbContext())
{
    // run your query here
}

Не держите свой контекст. Таким образом, у вас не будет проблем со старыми данными.

Ответ 2

db = new DbContext())
var context= ((Infrastructure.IObjectContextAdapter)db).ObjectContext;
context.Refresh(Core.Objects.RefreshMode.StoreWins, context.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged | EntityState.Modified))