Sto usando il framework Entity per creare un nuovo ordine. L'ordine contiene una raccolta di contatti, una relazione molti a molti. Voglio aggiungere un riferimento a un contatto esistente sull'ordine alla creazione dell'ordine. Entrambe ordinano e contattano oggetti entità.
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();
Quando vado ad allegare, questa eccezione viene lanciata:
"Attach non è un'operazione valida quando l'oggetto di origine associato a questa estremità correlata si trova in uno stato aggiunto, eliminato o scollegato. Gli oggetti caricati mediante l'opzione di unione NoTracking sono sempre separati."
So che probabilmente mi manca un passaggio o non capisco appieno come il framework dell'entità gestisca le relazioni molti-a-molti.
"Allegare" non è consentito perché non hai ancora salvato l'ordine. Chiamando "Aggiungi" dice a Entity Framework che vuoi inserire un nuovo contatto. Quindi ti rimane una sola opzione. Devi caricare il contatto.
Ecco il modo più veloce per farlo:
OrderDetails context = new OrderDetails();
Contact contact = context.GetObjectByKey(new EntityKey("OrderDetails.Contact", "contact_id", existingContactId));
order.Contact.Add(contact);