2012-02-02 81 views
12

我有兩個類訂單和項目流利NHibernate的多對多映射方式

我想這樣

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商店/產品例如您將創建一個OrderItems財產和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 2017-10-15 14:31:29