2012-02-02 9 views
12

Tengo dos clases de pedido y artículosFluido Nhibernate muchos a muchos Mapeo Camino

Quiero un método como este

class Order 
{ 
    public virtual IList<Item> GetItems(Order order) 
    { 
     //get items for that order. 
    } 
} 
class Item 
{ 
    public virtual IList<Order> GetOrders(Item item) 
    { 
     //get all the orders in which that items is present. 
    } 
} 

¿Es escribir para crear un método como este o en su lugar debería crear una propiedad

 public virtual IList<Item> Items { get; set; } 

¿Y cómo debo hacer el mapeo de esto es nhibernate?

Respuesta

29

Aparentemente tiene una relación muchos a muchos: un pedido puede tener muchos artículos y un artículo puede pertenecer a muchos pedidos. En una base de datos relacional necesita expresar esto con una tabla separada que presumo que tiene, supongamos que esta tabla se llama OrdersItems.

Siguiendo el ejemplo tienda/producto de la Fluent NHibernate documentation, se crearía una propiedad Items en un Order y una propiedad Orders en Item:

class Order 
{ 
    public virtual IList<Item> Items { get; protected set; } 
} 

class Item 
{ 
    public virtual IList<Order> Orders { get; protected set; } 
} 

Y las asignaciones:

public class OrderMap : ClassMap<Order> 
{ 
    public OrderMap() 
    { 
     HasManyToMany(x => x.Items) 
      .Cascade.All() 
      .Table("OrdersItems"); 
    } 
} 

public class ItemMap : ClassMap<Item> 
{ 
    public ItemMap() 
    { 
     HasManyToMany(x => x.Orders) 
      .Cascade.All() 
      .Inverse() 
      .Table("OrdersItems"); 
    } 
} 
+0

me estaba perdiendo la ".Inverse()", para referencia futura, si no se usa, la tabla "OrdersItems" hace un doble registro. – Nuno

Cuestiones relacionadas