2010-03-16 20 views
16

chcę map czegoś jak ten przy użyciu Fluent NHibernate, ale nie jestem pewien, jak mapować tabeli wyposażeniaFluent NHibernate wiele do wielu mapowania z dodatkową kolumnę

To tabele mam:

Produkt (id, nazwisko, ...)

Magazyn (id, nazwisko, ...)

Inventory (pRODUCT_ID, Warehouse_id, StockInHand)

mam map Produktu i magazyn jak poniżej

Publicznej ProductMap() {

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

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

    } 

WarehouseMap publicznego()

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

    } 

Problem twarz jest taka, że ​​jak mogę odwzorować StockInHand (w jaki sposób mapowanie modelu zapasów?).

lub czy istnieje inny sposób modelowania tego scenariusza?

Przeczytałem kilka istniejących pytań, ale jeszcze nie rozumiem, co należy zrobić.

Dzięki

Odpowiedz

20

Twój związek nie jest wiele-do-wielu miarę NHibernate jest zaniepokojony. Prawdziwie wiele-do-wielu nie ma żadnych dodatkowych kolumn, takich jak StockInHand w twoim przykładzie.

Należy zmapować to jako dwie relacje jeden-do-wielu i mapować zapasy jako encję.

Coś (I zostały pominięte inne właściwości):

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

Mam następnie mapowania tutaj, ale nie mogę uzyskać to do pracy ... To nie wydaje się zapisać poprawnie. Napisałem o tym pytanie [tutaj] (http://stackoverflow.com/questions/16201439/fluent-nhibernate-many-to-many-with-extra-column-does-not-insert) – 0909EM

Powiązane problemy