Свободный nHibernate hasManyToMany с колонками не PK - PullRequest
0 голосов
/ 23 апреля 2020

Я уже провел много исследований по этой проблеме и нашел много примеров, но никто не совпал с моим случаем, и я не могу заставить его работать.

У меня есть две сущности, связанные отношением таблица (пример сценария заказа / продукта):

public class Order
{
    public virtual int orderId { get; set; } /* THIS IS MY PK */
    public virtual string orderName { get; set; }
    public virtual IList<Product> products { get; set; }
}

public class Product
{
    public virtual int productId { get; set; }
    public virtual string productName { get; set; }
    public virtual IList<Order> orders { get; set; }
}

Я в основном хочу получить все Продукты для своего Заказа, так что в общем случае hasMany будет достаточно для меня, но, как я уже сказал, у меня есть таблица отношений между Я думаю, что я должен использовать hasManyToMany с .Table ()?

Мои текущие отображения выглядят так:

public OrderMap()
{
    Table("ORDER_TABLE");

    Id(x => x.orderId).Column("ORDER_ID").GeneratedBy.Native();
    Map(x => x.orderName).Column("ORDER_NAME");
    HasManyToMany(x => x.products)
        .PropertyRef("orderName")
        .Table("MY_RELATION_TABLE")
        .ParentKeyColumn("ORDER_NAME")
        .ChildKeyColumn("PRODUCT_ID")
        .Cascade.All();
}

public ProductMap()
{
    Table("PRODUCT_TABLE");

    Id(x => x.productId).Column("PRODUCT_ID").GeneratedBy.Native();
    Map(x => x.productName).Column("PRODUCT_NAME");
    HasManyToMany(x => x.orders)
        .Table("MY_RELATION_TABLE")
        .ParentKeyColumn("PRODUCT_ID")
        .ChildKeyColumn("ORDER_NAME")
        .Cascade.All()
        .Inverse();
}

ORDER_TABLE             MY_RELATION_TABLE        PRODUCT_TABLE
ORDER_ID      --------> ORDER_NAME        -----> PRODUCT_ID
ORDER_NAME <--|         PRODUCT_ID <------|

Как вы можете видеть, мой класс Order не ссылается на PK, поэтому я попытался PropertyRef, который приводит к ошибке DB. Если я не использую PropertyRef, моя коллекция Product всегда остается пустой.

Спасибо всем за помощь

...