Nhibernate克隆对象并作为新记录插入

Nhibernate克隆对象并作为新记录插入,nhibernate,clone,Nhibernate,Clone,是否有方法使用NHibernate克隆现有对象(通过NHibernate检索)并对其执行插入以创建新记录,而不是更新当前记录 我们使用它来进行某种时态版本控制,需要这种行为。我不知道nhibernate中有什么内置的东西可以满足您的要求 前方警告黑客 我没有试过,所以这只是大声思考nhibernate如何跟踪对象 根据对象图,可以重置版本(如果有)和id返回到映射中指定的默认值,这将创建一个克隆,因为它有效地重置了nhibernate跟踪对象的方式,并且在保存时将为其提供一个新id。还要注意,任

是否有方法使用NHibernate克隆现有对象(通过NHibernate检索)并对其执行插入以创建新记录,而不是更新当前记录


我们使用它来进行某种时态版本控制,需要这种行为。

我不知道nhibernate中有什么内置的东西可以满足您的要求

前方警告黑客
我没有试过,所以这只是大声思考nhibernate如何跟踪对象

根据对象图,可以重置版本(如果有)和id返回到映射中指定的默认值,这将创建一个克隆,因为它有效地重置了nhibernate跟踪对象的方式,并且在保存时将为其提供一个新id。还要注意,任何附加的映射对象也需要执行相同的操作才能获得深度克隆

如果是我,我可能会在对象上放置一个clone方法,该方法返回一个新对象以及属性的副本,等等


因此,其他一些答案建议使用Automapper

只需执行
MemberwiseClone
并清除Id即可。

虽然我还没有对此进行测试,但如果要克隆代理对象或任何类型的深嵌套对象,则使用MemberwiseClone可能会导致各种问题。它只是一个浅拷贝,所以代理和其他东西仍然会引用原始实体对象。