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