18

我有两个类 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; }

我应该怎么做这个映射是休眠的?

4

1 回答 1

39

显然你有一个多对多的关系:一个订单可以有很多项目,一个项目可以属于许多订单。在关系数据库中,您需要使用我认为您拥有的单独表来表达这一点 - 假设该表被称为OrdersItems.

按照Fluent NHibernate 文档中的 Store/Product 示例,您将Items在 an 中创建一个属性,在 中创建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");
    }
}
于 2012-02-03T07:19:57.603 回答