我可以用NHibernate Merge“忽略”关联对象吗?

时间:2011-02-17 15:25:49

标签: nhibernate fluent-nhibernate

我有一些“dumbed-down”实体进入http请求,我希望尽可能简单地保存。这些实体拥有自己的所有数据,但没有关于相关实体(用户等)的数据。

使用Session.Merge似乎做得很好,让分离的实体重新进入会话,而且我没有丢失任何相关的集合。但是当我保存合并的实体时,通过“引用”关系关联的任何内容都会消失。我不认为这是级联行为(我有cascade =没有按惯例定义)。

有没有办法可以修改合并行为(通过配置或其他方式),以便我可以合并这些不完整的实体而不会破坏关联?我希望摆脱目前存在的很多“滚动你自己的”合并代码。

如果更改了可用选项,我正在使用流畅的nhibernate进行映射。

修改

我最终通过基本存储库公开了merge,但是将该方法设置为虚拟,因此我可以根据需要在特定实现中处理这种情况。似乎运作良好。

1 个答案:

答案 0 :(得分:2)

我认为NHibernate的“Merge”方法与您的想法有所不同。它基本上将对象及其子对象附加到会话中,替换已存在的同一记录的任何副本。您需要的是更像SVN合并的东西,从您传入的对象图中获取更改,并将它们集成到现有的对象图中。这超出了NH的能力。

很抱歉地说,但我认为你会被困在这个问题上。让NH做这样的事情需要配置很多规则,例如“什么时候是一个空引用是一个实际的改变,什么时候应该被忽略”,这甚至可以在不同情况下改变。