如何解决流利的NHibernate HasMany未插入父代ID
| 我不知道为什么NHibernate插入没有外键的子实体。这是我的课public class Order {
public Order() {
this.Notes = new List<OrderNote>();
}
public virtual int OrderId {get; private set;}
public virtual IList<OrderNote> Notes {get; private set;}
}
public class OrderNote {
public OrderNote(string noteBy,string note) {
this.OrderNoteId = Guid.NewGuid();
this.NoteBy = noteBy;
this.Note = note;
}
public virtual Guid OrderNoteId {get; private set;}
public virtual string NoteBy {get; private set;}
public virtual string Note {get; private set;
}
这是我的Fluent NHibernate映射文件
public class OrderClassMap : ClassMap<Order> {
public OrderClassMap() {
Id(x => x.OrderId).GeneratedBy.Native();
HasMany(x => x.Notes).Inverse.KeyColumn(\"OrderId\").Cascase.AllDeleteOrphan();
}
}
public class OrderNoteClassMap : ClassMap<OrderNote> {
public OrderNoteClassMap() {
Id(x => x.OrderNoteId).GeneratedBy.Assigned();
Map(x => x.NoteBy);
Map(x => x.Note);
}
}
当我向订单的便笺集合中添加便笺并保存订单时,订单便会插入到没有外键的数据库中。
Order order = session.Query<Order>().Where(o => (o.OrderId == orderId)).Single();
order.Notes.Add(new OrderNote(\"Name\",\"This is a note\"));
session.SaveOrUpdate(order);
生成的insert语句是这样的:
INSERT INTO OrderNotes(OrderNoteId,NoteBy,Note)
它应该是:
INSERT INTO OrderNotes(OrderNoteId,Note,OrderId)
为什么会这样呢?我究竟做错了什么?
解决方法
将
Order
属性添加到OrderNote
类中,并将其设置为要添加注释的订单对象。
还要在OrderNoteClassMap
中加上add7ѭ
您也可以尝试在HasMany
映射上删除Inverse
,但我认为这样做不会。
, 尝试创建从OrderNote到Order的逆关系映射,然后在OrderNote类中添加Order属性。
我用来创建类似\“ addNote \”的方法
Order order = session.Query<Order>().Where(o => (o.OrderId == orderId)).Single();
order.AddNote(new OrderNote(\"Name\",\"This is a note\"));
session.SaveOrUpdate(order);
public virtual AddNote(OrderNote note)
{
note.Order=this;
order.Notes.Add(note);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。