我的问题是,是否存在不需要子对象具有父对象属性的父对象和子对象的流畅 NHibernate 映射?我还没有弄清楚如何将引用映射回父级。当我按原样使用映射调用 Create 时,我得到一个异常,因为子对象没有返回父对象所需的外键(数据存储中需要)。
我有两个 POCO 课程:
public class Parent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Child> Childs { get; set; }
}
public class Child
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int ParentId { get; set; }
}
还有一些映射:
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
this.Table("Parents");
this.Id(x => x.Id);
this.Map(x => x.Name);
this.HasMany(x => x.Childs).KeyColumn("ChildId").Cascade.AllDeleteOrphan();
}
}
public class ChildMap : ClassMap<Child>
{
public ChildMap()
{
this.Table("Childs");
this.Id(x => x.Id);
this.Map(x => x.Name);
// Needs some sort of mapping back to the Parent for "Child.ParentId"
}
}
和创建方法:
public Parent Create(Parent t)
{
using (this.session.BeginTransaction())
{
this.session.Save(t);
this.session.Transaction.Commit();
}
return t;
}
我希望能够创建一个包含子对象列表的父对象,但不让子对象引用回其父对象(父 ID 除外)。我想这样做是为了避免从 Parent 到 Childs 列表的循环引用返回到 Parent 对象,因为这会导致 JSON 序列化问题。