FluentNHibernate Однонаправленное сопоставление один ко многим - PullRequest
1 голос
/ 17 декабря 2010

У меня есть два класса.Один - это Заказ:

public class Order
{
    public virtual int Id { get; set; }
    public virtual IList<Product> Products { get; set; }
}

Другой - это Продукт:

public class Product
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

Они свободно отображаются следующим образом:

public class OrderMap : ClassMap<Order>
{
    public OrderMap()
    {
        Table("Orders");
        Id(x => x.Id, "Id");
        HasMany(x => x.Products)
            .KeyColumn("OrderId")
            .Cascade.All();
    }
}

public class ProductMap : ClassMap<Product>
{
    public ProductMap()
    {
        Table("Products");
        Id(x => x.Id, "Id");
        Map(x => x.Name);
    }
}

База данных НЕограничение not-null для столбца OrderId таблицы Products.Проблема заключается в том, что заказ и продукты сохраняются, однако продукты сохраняются с нулевым значением в столбце OrderId.

Я что-то упустил?

Ответы [ 3 ]

0 голосов
/ 17 декабря 2010

вместо HasMany просто используйте ссылку

Reference(x => x.Products).Cascade.All();

Обратное в HasMany - это термин NHibernate, и это означает, что другой конец отношений отвечает за сохранение.

0 голосов
/ 20 декабря 2010

Что ж, как ни странно, мы решили эту проблему здесь, переработав наше управление сеансами, используя его для создания транзакции IT в операторе использования. Странно, но решаемо. Спасибо всем!

0 голосов
/ 17 декабря 2010

Попробуйте использовать:

HasMany(x => x.Products)
        .KeyColumn("OrderId")
        .Inverse()
        .Cascade.All();

Который (Inverse ()) указывает, что OrderId находится в таблице Products

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...