2012-02-02 54 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