Быстрый Nhibernate Many-Many, отображающийся с дополнительным столбцом

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

Это - таблицы, которые я имею:

Продукт (идентификатор, Имя...)

Склад (идентификатор, имя...)

Материально-технические ресурсы (Product_id, Warehouse_id, StockInHand)

Я имею, отображают продукт и Склад как ниже

Общедоступный ProductMap () {

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

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

    }

общедоступный WarehouseMap ()

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

    }

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

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

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

Спасибо

16
задан pang 16 March 2010 в 15:05
поделиться

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);
}
21
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: