2009-01-02 16 views
8

Estoy utilizando el marco Entidad para crear un nuevo pedido. La orden contiene una colección de contactos, una relación de muchos a muchos. Quiero agregar una referencia a un contacto existente en el pedido en la creación del pedido. Ambos ordenan y contactan objetos de una entidad.Uso del marco de entidad para agregar entidades existentes a una colección en una entidad recién creada

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

Cuando voy a adjuntar, esta excepción se lanza:

"ATTACH no es una operación válida cuando el objeto de origen asociado con este fin relacionado está en un añadido, eliminado o estado separado objetos. cargados usando la opción de fusión NoTracking siempre están separados. "

Sé que probablemente me esté perdiendo un paso o no entiendo completamente cómo la entidad marco maneja las relaciones de muchos a muchos.

Respuesta

3

Si Orden tiene una propiedad de contacto, entonces se puede hacer:

order.Contact.Add(contact); 

Yo sugeriría hacer la propiedad llamada Contacto s lugar de contacto, sin embargo.

5

"Adjuntar" no está permitido porque aún no ha guardado la orden. Llamar a "Agregar" le dice a Entity Framework que desea insertar un nuevo contacto. Entonces te queda solo una opción. Necesitas cargar el contacto.

Aquí es la manera más rápida de hacer eso:

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

O puede crear una entidad talón (con la tecla sabes) adjuntar que con el Contexto (no la colección) y luego añadir el sub a la colección . Consulte la sugerencia 26 para obtener más información: http://blogs.msdn.com/alexj/archive/2009/06/19/tip-26-how-to-avoid-database-queries-using-stub-entities.aspx –

+0

Brilliant! Sí, lo que dijo. –

Cuestiones relacionadas