Свободное владение Nhibernate Многие ко многим Отображение пути - PullRequest
14 голосов
/ 02 февраля 2012

У меня есть два класса 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 Ответ

32 голосов
/ 03 февраля 2012

Очевидно, у вас есть отношение «многие ко многим»: у заказа может быть много предметов, и предмет может принадлежать множеству заказов. В реляционной базе данных вам нужно выразить это в отдельной таблице, которая, как я полагаю, у вас есть - давайте предположим, что эта таблица называется OrdersItems.

Следуя примеру Store / Product из Fluent NHibernate документации , вы создадите свойство 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");
    }
}
...