Entity Framework 4 и проверка непостоянных объектов в коллекциях отношений - PullRequest
1 голос
/ 25 февраля 2010

Какова лучшая практика в отношении Entity Framework и проверки новых объектов перед их сохранением (или, другими словами, вызовом .SaveChanges ()), когда новый объект может полагаться либо на постоянные объекты, либо на другие новые объекты?*

Например, рассмотрим следующее:

Entity1 MyEntity1 = new Entity1();
MyEntity1.Name = "Hornblower";
DataContext.Entity1s.Add(MyEntity1);

.... Other code ....

Entity2 MyEntity2 = new Entity2();
MyEntity2.Entity1s.Add(MyEntity1);

.... Other code ....

// Validate that MyEntity2 has at least 1 Entity1 relationship
if (MyEntity2.Entity1s.Count() > 0 )
{
    // Valid - save it
    DataContext.SaveChanges();
} else {
    // Invalid - handle it
}

В приведенном выше псевдокоде это будет правильный и правильный метод проверки требуемых условий - можно ли полагаться на .Count ()вернуть как сохраненные MyEntity1s, так и непостоянные MyEntity1s, и, таким образом, в приведенном выше случае заставить проверку пройти успешно*

Му

Ответы [ 3 ]

0 голосов
/ 26 апреля 2010

Сначала я рассмотрю упрощенное сохранение, которое сохранит только ваше текущее (игровое?) Состояние , а не все объекты вашей Entity System. Например: «игрок на уровне @ 123 456 предметов Foo, Bar».

Другим способом может быть сериализация, а затем десериализация ваших объектов . Начните с корневого объекта и во время сериализации также сериализуйте все зависимости. Эта опция может быть очень сложной, особенно с открытыми файлами, соединениями и другими элементами, которые не сериализуются.

0 голосов
/ 27 апреля 2010

Ваш код немного разрознен.

Вы прикрепили MyEntity1 к ObjectContext, вызвав

DataContext.Entity1s.Add(MyEntity1);

но не прикрепили (или не показали в примере) MyEntity2 к контексту.

То, что помимо сути, короткий ответ: Да . Ваша проверка останется верной и будет считаться действительной.

Рассуждение:

Управление объектами не зависит от контекста объекта. При добавлении или удалении ассоциаций из сущностей изменения отражаются на сущностях независимо от их состояния по отношению к контексту объекта, который им управляет.

Pitfall

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

0 голосов
/ 25 февраля 2010

Количество ваших отношений является частью вашей модели и не требует отдельной проверки. Если вам требуется 1 .. * вместо 0 .. *, определите модель таким образом, и EF проверит ее для вас.

...