2010-03-16 3 views
16

Je veux carte STH comme cela en utilisant Fluent NHibernate, mais je ne suis pas sûr de savoir comment la carte de la table d'inventaireFluent NHibernate Many-to-Many mapping avec colonne supplémentaire

Ce sont les tableaux I ont:

produit (Id, nom, ...)

Entrepôt (Id, nom, ...)

Inventaire (Product_id, Warehouse_id, StockInHand)

J'ai la carte du produit et Entrepôt comme ci-dessous

ProductMap public() {

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

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

    } 

WarehouseMap publique()

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

    } 

Le problème que je face est que comment Puis-je cartographier le StockInHand (comment le mappage du modèle d'inventaire?).

ou existe-t-il un autre moyen de modéliser ce scénario?

J'ai lu certaines questions mais je n'ai pas encore compris ce qu'il faut faire.

Merci

Répondre

20

Votre relation est pas beaucoup à beaucoup en ce qui concerne NHibernate. Un vrai many-to-many n'a pas de colonnes supplémentaires, comme StockInHand dans votre exemple.

Vous devez mapper cela comme deux relations un-à-plusieurs et mapper l'inventaire en tant qu'entité.

Quelque chose comme (je l'ai sauté les autres propriétés):

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

J'ai suivi vos correspondances, mais je ne peux pas obtenir ce travail ... Cela ne semble pas enregistrer correctement. J'ai écrit une question à ce sujet [ici] (http://stackoverflow.com/questions/16201439/fluent-nhibernate-many-to-many-with-extra-column-does-not-insert) – 0909EM

Questions connexes