2012-02-02 30 views
12

Tôi có hai lớp theo thứ tự và mụcthạo Nhibernate Nhiều người đến Nhiều Mapping Way

Tôi muốn có một phương pháp như thế này

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

Có viết để tạo ra một phương pháp như thế này hay thay vào đó tôi nên tạo một tài sản

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

Và làm cách nào để tôi lập bản đồ cho điều này là nhibernate ??

Trả lời

29

Dường như bạn có mối quan hệ nhiều-nhiều: Thứ tự có thể có nhiều mục và một mục có thể thuộc nhiều đơn đặt hàng. Trong một cơ sở dữ liệu quan hệ, bạn cần thể hiện điều này với một bảng riêng mà tôi cho rằng bạn có - hãy giả sử bảng này được gọi là OrdersItems.

Tiếp theo ví dụ Store/sản phẩm từ Fluent NHibernate documentation bạn sẽ tạo ra một tài sản Items trong một Order và một tài sản Orders trong Item:

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

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

Và ánh xạ:

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

Tôi đã bỏ lỡ ".Inverse()", để tham khảo trong tương lai, nếu người dùng không sử dụng nó, bảng "OrdersItems" tạo một đăng ký kép. – Nuno

Các vấn đề liên quan