请先告诉我们我们的情况。
我们正在开发一个棕色的现场应用程序。 有一个给定的数据库结构,我们不能像这个例子那样改变:
表1 [ID] [Field1] [Field2] [Field3] ...
表2 [ID] [表1_ID] [FieldA] [FieldB] [FieldC] ...
Table1_ID是 Table1 的外键。这意味着 Table1 可以有来自 Table2 的多个子项。
字段和键都不能为空。每个表都有一个预INSERT触发器,用于从表序列中设置ID。
我们的申请中有以下课程。
数据库表1的类:
public class Parent
{
public virtual long? Id { get; set; }
public virtual string Field1 { get; set; }
public virtual string Field2 { get; set; }
public virtual string Field3 { get; set; }
public virtual List<Child> Children { get; set; } // Holds the children of Table2
}
数据库表2的类:
public class Child
{
public virtual long? Id { get; set; }
public virtual long? ParentId { get; set; }
public virtual string FieldA { get; set; }
public virtual string FieldB { get; set; }
public virtual string FieldC { get; set; }
}
我们需要通过网络序列化这个树结构(这只是最简单的版本)。 对于序列化,我们在ServiceStack中使用ServiceStack.Text。
由于从Table2到Table1作为对象的反向引用会在序列化时引起循环引用错误(表1 - &gt; Table2 - &gt; Table1 - &gt; Table2 ......等等),我们是绑定到这个结构。
客户端/服务器创建新结构而不设置任何 Id 或 ParentId 。键值为NULL。我们希望NHibernate为我们这样做。
有没有办法创建一个有效的Fluent-NHibernate映射,它首先插入 Table1 ,从数据库INSERT触发器中使用新的 Id ,应用此< em> Id 到其子级 ParentIds 并插入子级(表2)?
重要的是不要在没有 ParentId 的情况下插入孩子并在第二步中更新ParentId。