流利的Nhibernate多对多映射方式

时间:2012-02-02 06:31:56

标签: fluent-nhibernate fluent-nhibernate-mapping

我有两个类Order和Items

我想要一个像这样的方法

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 ??

1 个答案:

答案 0 :(得分:32)

显然,您有多对多的关系:订单可以包含多个商品,而商品可以属于多个订单。在关系数据库中,你需要用一个我认为你拥有的单独表来表达它 - 让我们假设这个表叫做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");
    }
}