В последнее время я использовал много Entity Framework в приложении MVV MVVM, и я столкнулся с некоторыми проблемами. Для отображения данных мои модели просмотра используют короткий объект ObjectContext. Эти модели представлений будут использоваться в долговременном процессе, поэтому я предпочитаю использовать объект ObjectContext с коротким прожигом, чтобы не ухудшить производительность.Entity Framework не отслеживает изменения коллекции при повторном подключении объекта
Так что в основном это означает, что мои объекты потребляются в отключенном режиме. Эти полномочия могут быть созданы, просмотрены, обновлены и удалены. У меня не было проблем с сохранением изменений в базе данных в отключенном режиме. Но я нашел конкретный случай, когда изменения не сохраняются без ошибок при вызове метода SaveChanges()
. Это происходит, когда я пытаюсь обновить объект, у которого есть свойство коллекции. Скалярное свойство объекта сохраняется без проблем, но изменения в коллекции не отражаются в базе данных, как если бы они не могли отслеживать эти изменения при повторном подключении.
Вот пример кода моего случая, когда я изменяю имя сущности, а затем добавляю объект в его коллекцию отчетов. После SaveChanges()
в базе данных отражено только имя клиента.
this.Client.Name = "Test Client";
this.Client.Reports.Add(new Report { Name = "Test Report" });
using (ReportCompositionEntities entities = new ReportCompositionEntities(this.connectionStringName))
{
entities.Clients.ApplyCurrentValues(this.Client);
entities.SaveChanges();
}
Я делаю что-то неправильно или EF просто не может отслеживать такие изменения при повторной привязке объекта?
Действительно интересный случай. Теперь факт, что EF не обновляет эти изменения, имеет смысл, поскольку объект навигационного свойства также может ссылаться на другой объект. Нет проблем при создании нового объекта, но проблемы с параллелизмом могут возникать при удалении. В моей архитектуре каждый MVVM представляет собой единственную репутацию парадигмы CRUD. Я переместил свою виртуальную машину на подключенный режим (процесс утилизации обрабатывается из коробки по моей архитектуре), а профилирование памяти пока не выявило каких-либо проблем. Время покажет, и на самом деле довольно легко вернуться в отключенный режим. Спасибо за вашу помощь. – Ucodia