2010-03-16 4 views
16

Tôi muốn để lập bản đồ sth như thế này sử dụng thông thạo Nhibernate nhưng tôi không chắc chắn làm thế nào để lập bản đồ các bảng kiểm kêthạo Nhibernate Nhiều-to-Nhiều bản đồ với cột thêm

Đây là bảng tôi có:

Sản phẩm (Id, Name, ...)

Kho (Id, Name, ...)

Inventory (product_id, Warehouse_id, StockInHand)

Tôi có bản đồ sản phẩm và kho như dưới đây

Công ProductMap() {

 Id(x => x.Id); 
     Map(x => x.Name); 

     HasManyToMany(x => x.StoresStockedIn) 
     .Cascade.All() 
     .Inverse() 
     .Table("Inventory"); 

    } 

WarehouseMap công cộng()

{ 
     Id(x => x.Id); 
     Map(x => x.Name);  
     HasManyToMany(x => x.Products) 
     .Cascade.All() 
     .Table("Inventory"); 

    } 

Vấn đề tôi gặp phải là làm thế nào Tôi có thể lập bản đồ StockInHand (làm thế nào mô hình hàng tồn kho nên lập bản đồ?).

hoặc có cách nào khác để mô hình hóa trường hợp này không?

Tôi đã đọc một số câu hỏi hiện có nhưng chưa hiểu rõ phải làm gì.

Cảm ơn

Trả lời

20

Mối quan hệ của bạn không phải là nhiều liên quan đến NHibernate. Nhiều người thực sự không có cột bổ sung, chẳng hạn như StockInHand trong ví dụ của bạn.

Bạn phải ánh xạ bản đồ này dưới dạng hai mối quan hệ một-nhiều và bản đồ Khoảng không quảng cáo dưới dạng thực thể.

Giống như (tôi đã bỏ qua các thuộc tính khác):

public class Product 
{ 
    public List<Inventory> Inventory { get; set; } 
} 

public class Warehouse 
{ 
    public List<Inventory> Inventory { get; set; } 
} 

public class Inventory 
{ 
    public Product Product { get; set; } 
    public Warehouse Warehouse { get; set; } 
    public bool StockInHand { get; set; } 
} 

public ProductMap() { 
    Id(x => x.Id); 
    Map(x => x.Name); 
    HasMany(x => x.Inventory) 
    .Cascade.All() 
    .Inverse() 
    .Table("Inventory"); 
} 

public WarehouseMap() 
{ 
    Id(x => x.Id); 
    Map(x => x.Name);  
    HasMany(x => x.Inventory) 
    .Cascade.All() 
    .Inverse() 
    .Table("Inventory"); 
} 

public InventoryMap() 
{ 
    CompositeId() 
     .KeyReference(x => x.Product, "Product_id") 
     .KeyReference(x => x.Warehouse, "Warehouse_id") 

    Map(x => x.StockInHand); 
} 
+0

Tôi đã theo ánh xạ của bạn ở đây, nhưng tôi không thể có được điều này để làm việc ... Đây dường như không tiết kiệm một cách chính xác. Tôi đã viết một câu hỏi về nó [ở đây] (http://stackoverflow.com/questions/16201439/fluent-nhibernate-many-to-many-with-extra-column-does-not-insert) – 0909EM