Обновление данных с использованием Entity Framework - PullRequest
9 голосов
/ 25 мая 2011

Я пытаюсь использовать Entity Framework для запроса базы данных, и у меня есть следующий код, который я использую для получения некоторых данных.

var students= MyEntities.Students.Where(s => s.Age > 20).ToList();

Этот код работает нормально и возвращает правильные данные.Однако, если я запускаю этот код, затем иду в базу данных и обновляю записи, чтобы изменить данные, которые должен возвращать этот код, а затем повторно запустить этот код, не закрывая приложение, я получаю исходные данные.Я почти уверен, что раньше он работал нормально, но теперь это не обновляет данные.

Ответы [ 2 ]

16 голосов
/ 25 мая 2011

Нет, это никогда не работало.Это существенное поведение структуры сущностей (и многих инструментов ORM), называемое картой идентичности ( объяснение здесь ).

Если вы выполните запрос в том же контексте, ваши сущности не будут обновлены.Он будет добавлять только новые объекты, созданные в базе данных, между выполнением этих двух запросов.Если вы хотите заставить EF перезагрузить сущности, вы должны сделать что-то вроде этого:

ObjectQuery query = MyEntities.Students;
query.MergeOption = MergeOption.OverwriteChanges;
var students = query.Where(s => s.Age > 20).ToList();
6 голосов
/ 25 мая 2011

Вы сталкиваетесь с проблемами, потому что EF кэширует данные, поэтому, если данные изменяются за кулисами, и вы не избавляетесь от своего контекста или не открываете его заново, вы сталкиваетесь с проблемами.

Общее практическое правило заключается в том, чтобы максимально сократить время существования контекста, чтобы обойти проблемы, подобные тем, которые вы только что упомянули.

Пожалуйста, не игнорируйте то, что я сказал выше, но если вы хотите принудительно обновить базу данных, вы можете использовать метод Refresh () .

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