web-dev-qa-db-ja.com

FluentNhibernate多対多のマッピング方法

OrderとItemsの2つのクラスがあります

このような方法が欲しい

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

そして、これのマッピングをどのように行う必要がありますか?

15
Infant Dev

どうやらあなたは多対多の関係を持っているようです:注文は多くのアイテムを持つことができ、アイテムは多くの注文に属することができます。リレーショナルデータベースでは、これを別のテーブルで表現する必要があります。このテーブルの名前がOrdersItemsであると仮定しましょう。

Fluent NHibernateドキュメント のStore/Productの例に従って、ItemsOrderプロパティを作成し、OrdersItemプロパティを作成します。

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