Entity Framework: определение внешних изменений в базе данных
У меня есть хранимая процедура, которая меняет много данных в базе данных. Эта хранимая процедура вызывается из приложения, которое в то же время использует EF для операций с данными.
Итак, я нажимаю кнопку, хранимая процедура запускается в базе данных, данные изменяются, а EF показывает старые данные пользователю.
Есть ли способ заставить DbContext или ObjectContext обновлять данные из базы данных? ObjectContext.Refresh() может быть решением, но я не хочу вызывать этот метод для каждой отдельной таблицы, которая может быть изменена. Я хочу, чтобы все таблицы были обновлены за один шаг.
Я использую Entity Framework 5, ориентируясь на .NET 4.0
EDIT: добавлены данные, но изменение существующих данных не отражается EF. Я вижу недавно добавленные записи, но я не вижу изменений, которые я внес в существующие записи.
Ответы
Ответ 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))