2

请允许我先说明我们的情况。

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

表1 [ID] [字段1] [字段2] [字段3] ...

表2 [ID] [Table1_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 作为对象的反向引用会在序列化(Table1 -> Table2 -> Table1 -> Table2 ... 等等)时导致循环引用错误,我们绑定到这个结构。

客户端/服务器在不设置任何IdParentId的情况下创建一个新结构。键值为 NULL。我们希望 NHibernate 为我们做这件事。

有没有办法创建一个工作的 Fluent-NHibernate 映射,它首先插入Table1,使用数据库 INSERT 触发器中的新Id,将此Id应用到其子ParentId并插入子(Table2)?

重要的是不要插入没有ParentId的子代并在第二步中更新 ParentId。

4

0 回答 0