FluentNHibernate单向一对多映射

时间:2010-12-17 13:25:18

标签: nhibernate fluent-nhibernate

我有两节课。一个是订单:

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

数据库在Products表的OrderId列上没有非空约束。 问题是:订单和产品都被保留,但是产品在OrderId列上保持空值。

我错过了什么吗?

3 个答案:

答案 0 :(得分:0)

而不是HasMany只使用参考

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

对HasMany的反转是一个NHibernate术语,它意味着关系的另一端负责保存。

答案 1 :(得分:0)

嗯,虽然看起来很奇怪,但我们通过重新使用Session管理来解决这个问题,使用它在using语句中创建ITransaction。奇怪,但解决了。谢谢大家!

答案 2 :(得分:-1)

尝试使用:

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

其中(Inverse())声明OrderId在Products表