2012-02-02 16 views
12

Ho due classi di ordine e gli elementiFluent NHibernate molti a molti Way Mapping

Voglio un metodo come questo

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. 
    } 
} 

E 'scrivere per creare un metodo come questo o invece dovrei creare una proprietà

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

E come devo fare la mappatura per questo è nibernetico ??

risposta

29

A quanto pare si ha una relazione molti-a-molti: un ordine può avere molti articoli e un articolo può appartenere a molti ordini. In un database relazionale devi esprimerlo con una tabella separata che presumo tu abbia - assumiamo che questa tabella si chiami OrdersItems.

Seguendo l'esempio Store/Prodotto dal Fluent NHibernate documentation si creerebbe un Items proprietà in una Order e una proprietà Orders in Item:

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

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

E le mappature:

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

mi mancava il ".Inverse()", per riferimento futuro, se non lo si usa, la tabella "OrdersItems" crea un doppio registro. – Nuno