2009-01-02 10 views
8

Używam struktury Entity do utworzenia nowego zamówienia. Zamówienie zawiera kolekcję kontaktów, wiele do wielu relacji. Chcę dodać odniesienie do istniejącego kontaktu w zamówieniu podczas tworzenia zamówienia. Zarówno Zamów, jak i skontaktuj się z obiektami jednostki.Używanie struktury encji do dodawania istniejących obiektów do kolekcji w nowo utworzonym elemencie.

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(); 

Kiedy przejść do mocowania, to jest wyjątek:

„Attach nie jest ważne działanie, gdy obiekt źródło związane z tym na końcach znajduje się w stanie dodać, usunąć lub indywidualny stan obiekty. ładowane za pomocą opcji NoTracking merge są zawsze odłączone. "

Wiem, że prawdopodobnie brakuje mi kroku lub nie rozumiem w pełni, w jaki sposób struktura podmiotu obsługuje relacje wiele do wielu.

Odpowiedz

3

Jeśli zamówienie ma nas własności, to można zrobić:

order.Contact.Add(contact); 

Proponuję dokonywania właściwość o nazwie Contact s zamiast Contact, choć.

5

"Załącz" jest niedozwolone, ponieważ nie zapisałeś jeszcze zamówienia. Wywołanie "Dodaj" mówi Entity Framework, że chcesz wstawić nowy kontakt. Pozostaje ci tylko jedna opcja. Musisz załadować kontakt.

Oto najszybszy sposób, aby to zrobić:

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

Albo można utworzyć podmiot pośredniczący (klawiszem wiesz) załączyć że do kontekstu (nie zbiórki), a następnie dodać sub do kolekcji . Zobacz Tip 26, aby uzyskać więcej informacji: http://blogs.msdn.com/alexj/archive/2009/06/19/tip-26-how-to-avoid-database-queries-using-stub-entities.aspx –

+0

Genialny! Tak, co powiedział. –

Powiązane problemy