Fluent Nhibernate使用额外列进行多对多映射

pan*_*ang 16 mapping many-to-many fluent-nhibernate

我想用流利的Nhibernate映射这样的东西,但我不知道如何映射库存表

这是我的表格:

产品(身份证,姓名,......)

仓库(Id,Name,...)

库存(Product_id,Warehouse_id,StockInHand)

我已经像下面那样映射了产品和仓库

公共产品地图(){

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

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

    }
Run Code Online (Sandbox Code Playgroud)

public WarehouseMap()

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

    }
Run Code Online (Sandbox Code Playgroud)

我面临的问题是如何映射StockInHand(库存模型应如何映射?).

或者有其他方式来模拟这种情况吗?

我已经阅读了一些现有的问题,但尚未清楚地了解该怎么做.

谢谢

Pau*_*tum 21

就NHibernate而言,你的关系不是多对多的.真正的多对多没有其他列,例如您的示例中的StockInHand.

您必须将此映射为两个一对多关系,并将Inventory映射为实体.

像(我跳过其他属性)的东西:

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);
}
Run Code Online (Sandbox Code Playgroud)