Подтвердить что ты не робот

Свободное отображение Nhibernate Many-to-Many с дополнительной колонкой

Я хочу отобразить sth, как это, используя беглый Nhibernate, но я не уверен, как сопоставить таблицу инвентаря

Это таблицы, которые у меня есть:

Продукт (Id, Name,...)

Склад (Id, Name,...)

Инвентарь (Product_id, Warehouse_id, StockInHand)

У меня есть карта Продукта и Склада, как показано ниже

Public ProductMap()         {

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

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

    }

public WarehouseMap()

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

    }

Проблема, с которой я сталкиваюсь, заключается в том, как я могу сопоставить StockInHand (как должно отображаться модель инвентаризации?).

или есть другой способ моделирования этого сценария?

Я прочитал некоторые существующие вопросы, но еще не понял, что делать.

Спасибо

4b9b3361

Ответ 1

Ваши отношения не так много для многих, насколько это касается NHibernate. У истинного много-ко-многим нет дополнительных столбцов, таких как StockInHand в вашем примере.

Вы должны сопоставить это как два отношения "один ко многим" и перечислить Инвентарь как сущность.

Что-то вроде (я пропустил другие свойства):

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);
}