【问题标题】:Fluent Nhibernate Many to Many Mapping WayFluent Nhibernate 多对多映射方式
【发布时间】:2012-02-24 20:33:51
【问题描述】:

我有两个类 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 做映射??

【问题讨论】:

    标签: fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

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

    按照Fluent NHibernate documentation 中的商店/产品示例,您将在Order 中创建一个Items 属性并在Item 中创建一个Orders 属性:

    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");
        }
    }
    

    【讨论】:

    • 我遗漏了“.Inverse()”,以备将来参考,如果不使用它,“OrdersItems”表会创建一个双重注册表。
    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2011-10-09
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多