流利的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);
}