Мы загружаем данные из дб:
var somethings = Context.SomethingSet.ToList();
Тогда кто-то удаляет или добавляет строки за пределами контекста. Контекст все еще имеет удаленный объект кэшей, потому что он не знает, что они были удалены. Даже если я называю Контекст. SomethingSet. ToList (), наш контекст все еще содержит удаленные объекты, и свойства навигации не корректны.
Что лучший метод должен обновить полный набор от базы данных?
Метод Обновить - это то, что вам нужно:
Context.Refresh(RefreshMode.StoreWins, somethings);
Контекст данных EF является реализацией шаблона "Единица работы". Таким образом, он НЕ предназначен для хранения за пределами выполняемой работы. Как только ваша работа будет сделана, ожидается, что ваш контекст данных будет отброшен.
Это фундаментальное проектное решение для EF v1, EF v4 и LINQ to SQL. Если у вас нет очень специфических шаблонов использования данных и больших объемов памяти, вам следует избегать хранения контекстов данных дольше, чем это абсолютно необходимо для выполнения вашей единицы работы.
http://sdesmedt.wordpress.com/2009/02/18/unit-of-work-pattern/
http://takacsot.freeblog.hu/Files/martinfowler/unitOfWork.html