Использование структуры сущностей для добавления существующих сущностей в коллекцию вновь созданной сущности

entity-framework many-to-many

Вопрос

Я использую 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, всегда отсоединяются».

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

Популярные ответы

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

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

OrderDetails context = new OrderDetails();
Contact contact = context.GetObjectByKey(new EntityKey("OrderDetails.Contact", "contact_id", existingContactId));
order.Contact.Add(contact);


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему