Использование структуры сущностей для добавления существующих сущностей в коллекцию вновь созданной сущности - PullRequest
8 голосов
/ 02 января 2009

Я использую Entity Framework для создания нового заказа. Заказ содержит коллекцию контактов, отношения многие ко многим. Я хочу добавить ссылку на существующий контакт в заказ на создание заказа. Как заказать, так и связаться с объектами сущности.

 Order order = new Order();

 //set details on order

 Contact contact = new Contact();

 EntityKey contactKey =
                    new EntityKey("OrderDetails.Contact",
                        "contact_id", contact.Key.Id);

 contact.EntityKey = contactKey;
 contact.contact_id = contact.Key.Id;

 order.Contact.Attach(contact);  // throws an exception!

 OrderDetails ordTable = new OrderDetails();
            ordTable.AddToOrder(order);
            int result = orgTable.SaveChanges();

Когда я иду присоединиться, выдается это исключение:

"Присоединение не является допустимой операцией, когда исходный объект, связанный с этим связанным концом, находится в добавленном, удаленном или отсоединенном состоянии. Объекты, загруженные с использованием параметра объединения NoTracking, всегда отсоединяются."

Я знаю, что, вероятно, пропускаю шаг или не до конца понимаю, как структура сущностей обрабатывает отношения «многие ко многим».

Ответы [ 2 ]

5 голосов
/ 16 декабря 2009

«Присоединить» не разрешено, поскольку вы еще не сохранили заказ. Вызов «Добавить» сообщает Entity Framework, что вы хотите вставить новый контакт. Таким образом, вам остается только один вариант. Вам необходимо загрузить контакт.

Вот самый быстрый способ сделать это:

OrderDetails context = new OrderDetails();
Contact contact = context.GetObjectByKey(new EntityKey("OrderDetails.Contact", "contact_id", existingContactId));
order.Contact.Add(contact);
3 голосов
/ 05 января 2009

Если у Ордера есть свойство Контакт, то вы можете сделать:

order.Contact.Add(contact);

Я бы предложил создать свойство с именем Contact s , а не Contact.

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