Entity Framework: присоединение связанных объектов и другое управление состоянием - PullRequest
0 голосов
/ 06 июля 2011

У меня есть приложение, которое сначала использует код Entity Framework. Я пытаюсь написать свой слой доступа к ресурсам. У меня есть несколько объектов, которые все имеют отдельные таблицы базы данных и много объектных отношений. Может кто-нибудь указать мне современный пример методов CRUD со связанными объектами? Все, что я нашел, использует более старую версию (я использую DbContext, а не ObjectContext и т. Д.), И у меня возникают проблемы при написании этого самостоятельно.

Например, в настоящее время я работаю над объектом, имеющим отношения родитель-потомок с самим собой. Я пытаюсь написать метод Create. Если я использую context.Objects.Add(newObject), то все дочерние объекты также меняют свое состояние на Добавленное, что означает, что дублирующиеся дочерние объекты добавляются. Поэтому я попытался перебрать все дочерние элементы и прикрепить их к контексту, но затем все дочерние элементы, которые ранее не существовали, не добавляются в базу данных, и генерируется исключение DbUpdateException.

Есть ли общий способ, которым я могу присоединить все связанные сущности и сделать их состояния правильными? Буду признателен за любую помощь, вы можете дать мне. Спасибо!

Edit:

Я попытался явно загрузить дочерние элементы, используя Load(), а затем добавить исходный объект. К сожалению, это вызвало исключение, потому что родительский комментарий содержал дочерний элемент в своем списке дочерних элементов, но parentID существующего дочернего элемента еще не был обновлен.

1 Ответ

0 голосов
/ 06 июля 2011

Нет, нет способа прикрепить весь граф и позволить EF автоматически установить правильное состояние - эти проблемы не изменились с тех пор, как ObjectContext API. Вы должны всегда устанавливать состояние вручную для каждой сущности и отношения, или вы должны построить график из прикрепленных сущностей. Единственным исключением являются Самообследуемые объекты , но они не поддерживаются API DbContext.

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