NHibernate映射:在父项具有来自INSERT触发器的ID而不使用子项'ParentId的UPDATE时插入子项

时间:2014-01-30 10:05:42

标签: c# nhibernate fluent-nhibernate servicestack-text

请先告诉我们我们的情况。

我们正在开发一个棕色的现场应用程序。 有一个给定的数据库结构,我们不能像这个例子那样改变:

  

表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。

0 个答案:

没有答案