2012-02-02 24 views
12

mam dwie klasy Order i przedmiotyFluent NHibernate wiele do wielu mapowania Drogi

chcę metoda jak ten

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

Czy pisać do stworzenia metody takie jak to czy zamiast powinienem utworzyć właściwość

 public virtual IList<Item> Items { get; set; } 

A jak powinienem zrobić mapowanie dla tego jest nhibernate ??

Odpowiedz

29

Najwyraźniej masz relację wiele do wielu: Zamówienie może zawierać wiele pozycji, a przedmiot może należeć do wielu zamówień. W relacyjnej bazie danych musisz wyrazić to przy pomocy oddzielnej tabeli, którą, jak przypuszczam, masz - przyjmijmy, że ta tabela nazywa się OrdersItems.

Wzorem sklep/produkt od Fluent NHibernate documentation można utworzyć właściwość Items w Order i właściwość Orders w Item:

class Order 
{ 
    public virtual IList<Item> Items { get; protected set; } 
} 

class Item 
{ 
    public virtual IList<Order> Orders { get; protected set; } 
} 

a odwzorowań:

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

mi brakowało ".Inverse()", na przyszłość, jeśli go nie używasz, tabela "OrdersItems" tworzy podwójny rejestr. – Nuno