2010-03-16 22 views
16

quiero mapear algo como esto utilizando Nhibernate fluido, pero no estoy seguro de cómo asignar la tabla de inventarioFluido Nhibernate Muchos-a-Muchos mapeo con columna adicional

Se trata de las tablas que tienen:

producto (identificación, nombre, ...)

almacén (de identificación, nombre, ...)

Inventario (Product_id, Warehouse_id, StockInHand)

que tienen un mapa del producto y almacén, como a continuación

ProductMap Pública() {

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

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

    } 

WarehouseMap pública()

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

    } 

El problema que enfrentamos es que la forma en ¿Puedo mapear el StockInHand (cómo debería el mapeo del modelo de inventario?).

o hay alguna otra forma de modelar este escenario?

He leído algunas de las preguntas existentes pero todavía no entiendo bien qué hacer.

Gracias

Respuesta

20

Su relación no es una relación muchos-a-muchos en lo que se refiere a NHibernate. Un verdadero muchos-a-muchos no tiene columnas adicionales, como StockInHand en su ejemplo.

Tiene que asignar esto como dos relaciones de uno a muchos, y mapear el inventario como una entidad.

Algo así (he saltado las otras propiedades):

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

He seguido sus asignaciones de aquí, pero no puedo conseguir que esto funcione ... Esto no parece guardar correctamente. He escrito una pregunta al respecto [aquí] (http://stackoverflow.com/questions/16201439/fluent-nhibernate-many-to-many-with-extra-column-does-not-insert) – 0909EM

Cuestiones relacionadas