我有两节课。一个是订单:
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列上保持空值。
我错过了什么吗?
答案 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表
上