无法使用 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。
我一直在为相对简单的问题而苦苦挣扎:
在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。