2009-01-02 16 views
8

Tôi đang sử dụng khung pháp nhân để tạo đơn đặt hàng mới. Trình tự chứa một tập hợp các địa chỉ liên hệ, một mối quan hệ nhiều đến nhiều. Tôi muốn thêm một tham chiếu đến một liên hệ hiện có theo thứ tự khi tạo đơn đặt hàng. Cả hai thứ tự và liên hệ với một đối tượng thực thể.Sử dụng khung pháp nhân để thêm thực thể hiện có vào bộ sưu tập trên thực thể mới được tạo

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

Khi tôi đi đến đính kèm, ngoại lệ này được ném:

"Đính kèm không phải là một hoạt động có hiệu lực khi đối tượng nguồn kết hợp với cuối liên quan này là một bổ sung, xóa, hoặc trạng thái tách rời đối tượng. được tải bằng cách sử dụng tùy chọn hợp nhất NoTracking luôn được tách ra. "

Tôi biết tôi có thể thiếu một bước hoặc không hiểu hoàn toàn cách khung thực thể xử lý mối quan hệ nhiều với nhiều.

Trả lời

3

Nếu thứ tự có một tài sản liên hệ, sau đó bạn có thể làm:

order.Contact.Add(contact); 

tôi sẽ đề nghị làm tài sản được gọi là Liên s chứ không phải là liên hệ, mặc dù.

5

"Đính kèm" không được phép vì bạn chưa lưu đơn đặt hàng. Gọi "Add" cho Entity Framework biết rằng bạn muốn chèn một số liên lạc mới. Vì vậy, bạn chỉ còn lại một tùy chọn. Bạn cần tải liên hệ.

Dưới đây là cách nhanh nhất để làm điều đó:

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

Hoặc bạn có thể tạo ra một thực thể còn sơ khai (với phím bạn biết) hãy cắm chúng đến bối cảnh (không phải là bộ sưu tập) và sau đó Thêm sub vào bộ sưu tập . Xem Mẹo 26 để biết thêm: http://blogs.msdn.com/alexj/archive/2009/06/19/tip-26-how-to-avoid-database-queries-using-stub-entities.aspx –

+0

Tuyệt vời! Vâng, những gì anh ta nói. –

Các vấn đề liên quan