我可以吗;“忽略”;与NHibernate合并的关联对象?

我可以吗;“忽略”;与NHibernate合并的关联对象?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在http请求中加入了一些“简化”的实体,我希望尽可能简单地保存这些实体。这些实体都有自己的数据,但没有关于相关实体(用户等)的数据 使用Session.Merge似乎可以很好地将分离的实体恢复到会话中,并且我不会丢失任何关联的集合。但在保存合并实体时,通过“引用”关系关联的任何内容都会消失。我不认为这是级联行为(我的cascade=none是由约定定义的) 是否有任何方法可以修改合并行为(通过配置或其他方式),以便在不破坏关联的情况下合并这些不完整的实体?我希望摆脱目前存在的大量“滚动您自己

我在http请求中加入了一些“简化”的实体,我希望尽可能简单地保存这些实体。这些实体都有自己的数据,但没有关于相关实体(用户等)的数据

使用Session.Merge似乎可以很好地将分离的实体恢复到会话中,并且我不会丢失任何关联的集合。但在保存合并实体时,通过“引用”关系关联的任何内容都会消失。我不认为这是级联行为(我的cascade=none是由约定定义的)

是否有任何方法可以修改合并行为(通过配置或其他方式),以便在不破坏关联的情况下合并这些不完整的实体?我希望摆脱目前存在的大量“滚动您自己的”合并代码

如果可用选项发生变化,我将使用fluent nhibernate进行映射

编辑:

我最终通过一个基本存储库公开了merge,但使该方法成为虚拟的,这样我就可以根据需要在特定的实现中处理这种情况。似乎工作得很好。

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


很抱歉,但我想你会被困在这件事上。让NH这样做需要配置很多规则,比如“空引用什么时候是实际更改,什么时候应该忽略它”,这些规则甚至可以在不同的情况下更改。

谢谢,我怀疑是这样的。在试图找到另一种方法之前,我只是想确定一下:)你能详细解释一下你是如何通过自己的合并解决这个问题的吗?这有点难看——我基本上得到了我试图保存的实体(通常是从缓存中),并将一个映射到另一个,如果它们没有被发送,则映射回我通过线路发送的部分实体。然后像往常一样保存。不能说我会推荐它,除非你真的需要!