В последнее время я много использовал Entity Framework в приложении MVVM WPF и столкнулся с некоторыми проблемами. Для отображения данных мои модели представления используют недолговечный ObjectContext. Эти модели представления будут использоваться в длительном процессе, поэтому я предпочел использовать короткоживущий ObjectContext, чтобы не ухудшать производительность.
По сути, это означает, что мои сущности потребляются в отключенном режиме. Эти объекты можно создавать, просматривать, обновлять и удалять. У меня не было проблем с сохранением изменений обратно в базу данных в отключенном режиме. Но я обнаружил частный случай, когда изменения не сохраняются без появления ошибки при вызове метода 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 просто не может отслеживать такие изменения при повторном подключении объекта?