Entity Framework - Добавить дочернюю сущность

Код Entity Framework 5.0 сначала с существующей базой данных. Обратный инжиниринг классов с электроинструментами. Все работает отлично. База данных имеет две таблицы. Один родитель и один ребенок с внешним ключом возвращаются к родительскому идентификатору. Я БЫ's все int с автоматическим приращением. Я'Мы добавили несколько родительских записей и теперь хотим добавить дочерние записи к определенным родителям. Единственный способ сделать это - найти соответствующий родительский идентификатор, выполнив поиск в таблице «Родители» по имени или какому-либо другому свойству и вернув этот идентификатор. Затем используйте этот идентификатор в свойстве внешнего ключа при добавлении дочернего элемента. Я неЯ не хочу создать нового родителя, так что это единственный способ добавить ребенка к существующему родителю? Все примеры в Интернете, кажется, добавляют потомка вместе с добавлением нового родителя, а не добавляют потомка к существующему родителю. Любая помощь будет принята с благодарностью

 Pawel31 окт. 2012 г., 00:07
Чтобы установить связанный объект, вы должны либо установить свойство навигации в родительский объект, либо установить внешний ключ. Если вы знаете удостоверение личности, и вы неу родителя только внешний ключ. Если у вас есть родительский объект, просто установите свойство навигации. Если вы неt не знает идентификатор и не имеет родительского объекта. Как узнать, с каким родителем связан дочерний объект?
 user162613731 окт. 2012 г., 00:23
Позвольте мне попробовать на примере. Позволять'Говорят, что родительская сущность - учителя, а у меня в ББ, Джули и Дейв. Дочерняя сущность - это классы с отношением один учитель ко многим классам. Я хочу добавить класс к Джули, но я неу нее нет ее основного идентификатора, потому что он был создан автоматически несколько дней назад, когда я ее ввел Итак, я должен искать учитель имя свойства для "Джули» и вернуть ее первичный идентификатор, а затем использовать его в качестве внешнего ключа нового класса?
 Pawel31 окт. 2012 г., 03:02
Единственный способ идентифицировать Джулию - это использовать идентификатор. Причина этого заключается в том, что идентификатор всегда уникален, а имя - нет. Вы можете извлечь сущность из базы данных, используя код, подобный `context.Teachers.First (t => t.Name == "Джули») и используйте идентификатор или ссылку. Другого способа установить отношения не существует, так как вы не знаете, как установить отношения. Также обратите внимание, что Джули могла быть удалена за это время. "

Ответы на вопрос(1)

Решение Вопроса

Джули» (Лерман), случается, один из наших учителей, когда дело доходит до EF. Как она объясняет в своей книгеDbContext в ассоциации родитель-потомок может быть три свойства, два свойства навигации (parent.Children, child.Parent) и свойство внешнего ключа (child.ParentId). Вы можете установить один из них или любую их комбинацию в своем коде.

Когда EF запускается для обнаружения изменений (например, когдаSaveChanges вызывается) он запускает процесс под названиемисправление отношений это гарантирует, что три свойства будут синхронизированы.

Так что вы'у нас есть три варианта добавления дочерней сущности к родителю:

child.Parent = parentObject, Родительский объект должен быть сначала извлечен из базы данных.parentObject.Children.Add(child), Также требуется предварительно существующий родительский объект из базы данных.child.ParentId = parentId, для которого вам нужно только знать идентификатор. Вы можете получить Id так, как вы предлагали, но точно так же, поскольку известные вам объекты не будут удалены, вы можете сохранить его в некоторой переменной, чтобы использовать его в транзакциях.

С первыми двумя опциями дочерний объект не нужно добавлять в контекст вручную. EF знает достаточно, чтобы увидеть, что этос новым. С третьим вариантом он должен быть добавлен кcontext.Children до того как я'SaveChanges

 user162613731 окт. 2012 г., 16:55
мы отметили это как ответ и также указали на Павлаs комментарий, который подтверждает мое предположение о том, что мне нужен родительский объект или хотя бы родительский идентификатор, прежде чем я смогу добавить дочерний элемент. Постскриптум У меня есть все Джулиs книги и примеры, которые очень помогли при изучении Entity Framework.

Ваш ответ на вопрос