FluentNHibernate单向一对多映射

FluentNHibernate单向一对多映射,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有两节课。一是秩序: public class Order { public virtual int Id { get; set; } public virtual IList<Product> Products { get; set; } } 它们被流畅地映射如下: public class OrderMap : ClassMap<Order> { public OrderMap() { Table("Orders")

我有两节课。一是秩序:

public class Order
{
    public virtual int Id { get; set; }
    public virtual IList<Product> Products { 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列上没有NOTNULL约束。 问题是:订单和产品都被持久化,但是产品被持久化,OrderId列上的值为空

我遗漏了什么吗?

尝试使用:

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

WhichInverse声明OrderId在Products表上,而不是有许多just use Reference

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

HasMany上的反向是一个NHibernate术语,它意味着关系的另一端负责储蓄

好吧,尽管看起来很奇怪,我们在这里解决了这个问题,通过重新处理会话管理,使用它在using语句中创建ITransaction。奇怪,但解决了。谢谢大家

但这不是引用情况,因为在将双向一对多映射时,引用映射实体的另一侧。
Reference(x => x.Products).Cascade.All();