2012-03-26 15 views
14

Estoy usando inicializadores de objetos y colecciones en el programa y estoy pensando en cómo obtener el ejemplo a continuación.Inicializadores de objetos y colecciones: ¿se asigna uno mismo?

Orders.Add(new Order() 
       { 
        id = 123, 
        date = new datetime(2012,03,26) 
        items = new OrderItems() 
          { 
          lineid = 1, 
          quantity = 3, 
          order = ?? // want to assign to current order. 
          } 
       } 

¿Cómo puedo asignar el pedido recién creado al artículo de pedido?

+0

Es posible que desee simplemente agregar primero la colección de artículos de pedido y luego asignar el pedido. O tal vez estés bien con una relación de una sola vía. – ashes999

+1

Parece un poco extraño desde una perspectiva de modelado. ¿Por qué un 'OrderItem' contiene un' Order'? Creo que el 'Order' es la raíz agregada y contiene elementos con contexto adicional sobre esos elementos (' OrderItem's). Pero esos artículos realmente no necesitan saber nada sobre el pedido. – David

+0

Como solución alternativa, puede hacer que el creador de 'elementos' asigne la propiedad de forma transparente, aunque eso no funcionará para 'OrderItem's agregado a la colección más adelante. – millimoose

Respuesta

10

Lo que estás tratando de hacer aquí no es posible. No puede hacer referencia al objeto que se está construyendo dentro de un cuerpo de inicializador de objetos. Tendrá que romper esto en una serie de pasos separados

var local = new Order() { 
    id = 123, 
    date = new datetime(2012, 03, 26); 
}; 
local.items = new OrderItems() { 
    lineid = 1; 
    quantity = 3; 
    order = local; 
}; 
Orders.Add(local); 
2

Si Order.items es una propiedad, puede poner algo como esto en la incubadora propiedad

public class Order 
{ 
    private OrderItems _items; 
    public OrderItems items 
    { 
     get { return _items; } 
     set 
     { 
      _items = value 
      _items.order = this 
     } 
    } 
} 

A continuación, puede simplemente tomar la orden fuera del inicializador:

Orders.Add(new Order() 
      { 
       id = 123, 
       date = new datetime(2012,03,26) 
       items = new OrderItems() 
         { 
         lineid = 1, 
         quantity = 3, 
         } 
      } 
+0

Gracias, podría ser la solución al ejemplo, pero estoy preguntando si hay alguna forma durante el inicializador de objetos. – Turbot

+1

@laptop, me doy cuenta de eso. Como mencionó JaredPar, lo que esperabas hacer según tu ejemplo no era posible, así que esta fue la mejor solución sin construir cada elemento por separado, como sugirió Jared – psubsee2003

Cuestiones relacionadas