无法使用 parent 的 ID 保存 child

Can't save child with parent's Id

我一直在为相对简单的问题而苦苦挣扎:

在parentclass我贴图:

HasMany(x => x.States)
         .KeyColumn("WorkflowOid")
         .Inverse()
         .Cascade.All()
         .Not.LazyLoad();

数据库在 child table 中有列 WorkflowOid。

在child映射中class:

References(x => x.Workflow)
         .Column("WorkflowOid");

考虑在 "States" 列表中有一个状态的新工作流 object,有没有办法自动识别 parent 是工作流 object,而无需必须在 child?

中设置 "Workflow" 变量

我的意思是,当我保存一个 Workflow object 并没有将 Workflow 变量设置为 parent 实例时,会导致 child 中的列 "WorkflowOid" =] 为空。

不是您当前映射的方式。您将 parent 关系映射为 Inverse(),这意味着它不负责在 child object.

上保存关系

您确实有一个 Cascade.All() 集,但是 parent 只是在 child 上调用 SaveOrUpdate(),child 没有parent 设置,因此它为 WorkflowOid 从它的 null Workflow 属性.

保存 null

这里有一些方法可以解决这个问题:

1) 在 parent 上有一个名为 AddState(State state) 的方法,当您调用它时,将其设置为 state.Workflow = this 并将其添加到 States 集合中.

2) 通过删除 Inverse() 让 parent 负责保存与 child 的关系,并将 child 设置为 Inverse(),这意味着只有保存 parent 才能写入 WorflowOid 列。

3) 从 parent 中删除 Inverse(),并且根本不要 link child 到 parent,这意味着在新 child 仅创建 (但不是更新)时,您将同时获得 Save()(保存 child)和 Update()(添加 WorkflowOid 到它)事件,这是低效的,但有时有一个 nicer/more 合理的代码库胜过这个。显然,在这种情况下,您也只能通过他们的 parent 获得 children。