EntitiyFramework4 - Сохранить новую сущность со ссылкой на существующую сущность - PullRequest
1 голос
/ 19 марта 2012

Моя проблема довольно проста.Я хочу сохранить вновь созданный объект со ссылками на существующие объекты.Существующие объекты загружаются в другом контексте и сохраняются во время сеанса.Аналогично этому сообщению: Entity Framework Прикрепление сохраненного объекта к новому объекту

У меня есть эта модель: EntityModel

Когда пользователь нажимает новую кнопку, новаялист создается и заполняется разделами и полями в соответствии с доступными определениями (например, шаблоном).Этот лист сохраняется в сеансе и отображается.Пользователь может ввести значения для полей и сохранить его.Знайте, что проблема возникает:

Если я просто сохраню лист, весь граф объекта будет сохранен как новый объект.Но определения уже есть в базе данных -> InvalidOperationException («Свойство EntityKey может быть установлено только в том случае, если текущее значение свойства равно нулю.»)

Лист, конечно, не может быть прикреплен, поскольку он имеет тольковременный / недействительный EntityKey.

Третье решение, которое я попробовал: присоединение определений вручную к новому контексту, но присоединение приводит к присоединению полного графа объекта, что приводит к исключению InvalidOperationException («Объект с временным значением EntityKey не может быть присоединен к контексту объекта. ") Я проверил полный график, и ни один из элементов на графике не имеет временного EntityKey.(Раздел Определения и Определения поля).Похоже, что Attach () также пытается присоединить экземпляры Section, Field и Sheet.

Я просто хочу вставить новые объекты как новые записи и существующие определения, на которые нужно ссылаться.У вас есть идеи, как решить эту проблему?

Тестовое решение выложено здесь: http://www.coderline.net/AttachingTestSuite.zip

Ждем ваших предложений.

1 Ответ

2 голосов
/ 19 марта 2012

Когда вы наконец сохраните лист, вы должны создать новый объект и заполнить его необходимыми идентификаторами, а не ссылками на объекты, которые не были материализованы текущим контекстом.

Это неудобно, но это ожидаемое поведение дляОРМ.Entity Framework разработан на основе некоторых соглашений, которые подходят для корпоративных ситуаций.Он предназначен для многоуровневых операций, когда дерево объектов загружается, сериализуется для другого слоя, десериализуется из этого слоя, присоединяется к контексту и сохраняется.Это означает, что при подключении к нему ожидается наличие однородных объектов в этом дереве.

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