2012-02-02 1 views
12

J'ai deux classes Ordre et articlesCourant Nhibernate many to many Mapping Way

Je veux une méthode comme celle

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

Est-il écrire à créer une méthode comme ceci ou devrais-je créer à la place une propriété

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

Et comment dois-je faire la cartographie pour cela est nhibernate ??

Répondre

29

Apparemment, vous avez une relation plusieurs-à-plusieurs: Une commande peut contenir plusieurs articles et un article peut appartenir à plusieurs commandes. Dans une base de données relationnelle, vous devez l'exprimer avec un tableau séparé que je suppose que vous avez - supposons que cette table est appelée OrdersItems.

Suivant l'exemple magasin/produit de la Fluent NHibernate documentation vous créer une Items propriété dans un Order et une Orders propriété Item:

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

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

Et les applications:

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

je manque la ".Inverse()", pour référence future, si on ne l'utilise pas, la table "OrdersItems" fait un double registre. – Nuno