2012-02-02 4 views
12

У меня есть два класса Order и товарыFluent NHibernate многие ко многим Mapping Пути

хочу способ, как этот

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

ли написать, чтобы создать метод, как это или вместо этого я должен создать свойство

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

И как мне сделать сопоставление для этого - nhibernate ??

ответ

29

Видимо, у вас есть отношения «многие ко многим»: заказ может иметь много предметов, а элемент может принадлежать множеству заказов. В реляционной базе данных вам нужно выразить это с помощью отдельной таблицы, которая, как я полагаю, у вас есть, предположим, что эта таблица называется OrdersItems.

Следуя пример магазина/продукта от Fluent NHibernate documentation вы бы создать Items собственности в Order и Orders недвижимость в Item:

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

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

И отображения:

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

Я пропускал «.Inverse()», для дальнейшего использования, если его не использовать, таблица «OrdersItems» делает двойной реестр. – Nuno