Ich verwende das Entity-Framework, um eine neue Bestellung zu erstellen. Die Bestellung enthält eine Sammlung von Kontakten, viele zu vielen Beziehungen. Ich möchte bei der Bestellung beim Erstellen der Bestellung einen Verweis auf einen vorhandenen Kontakt hinzufügen. Bestellen Sie Objekte und kontaktieren Sie Objekte.
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();
Beim Anhängen wird diese Ausnahme ausgelöst:
"Attach ist keine gültige Operation, wenn sich das mit diesem verwandten Ende verknüpfte Quellobjekt in einem hinzugefügten, gelöschten oder getrennten Zustand befindet. Objekte, die mit der NoTracking-Zusammenführungsoption geladen werden, werden immer getrennt."
Ich weiß, dass mir wahrscheinlich ein Schritt fehlt oder ich nicht vollständig weiß, wie das Entity-Framework viele-zu-viele-Beziehungen handhabt.
"Anhängen" ist nicht zulässig, da Sie die Bestellung noch nicht gespeichert haben. Wenn Sie "Hinzufügen" aufrufen, wird Entity Framework angewiesen, einen neuen Kontakt einzufügen. Sie haben also nur eine Option. Sie müssen den Kontakt laden.
Hier ist der schnellste Weg, dies zu tun:
OrderDetails context = new OrderDetails();
Contact contact = context.GetObjectByKey(new EntityKey("OrderDetails.Contact", "contact_id", existingContactId));
order.Contact.Add(contact);