在NHibernate中克隆一个实体?

Oli*_*ver 3 c# nhibernate

我想将一个对象保存到数据库两次.我有这个代码:

using (var ss = NHibHelp.OpenSession())
using (var tt = ss.BeginTransaction())
{
    var entity = new Entity();

    ss.Save(entity);
    ss.Save(entity);

    tt.Commit();
}
Run Code Online (Sandbox Code Playgroud)

但这导致只有一行被添加到数据库中.如何将单个对象插入数据库两次(使用两个不同的ID)?

Mar*_*nst 7

你不应该这样做 - NHibernate在它的会话中保持"对象身份",所以它不会区分..well ..同一个对象.我真的建议不要这样做,更好的解决方案是查看克隆对象的方法(通过反射或克隆方法),然后保存克隆对象.

如果你想忽略我上面的建议,你可以通过从会话中逐出实体,将它的id设置回未保存的值(取决于你的映射,但可能是0),然后再次保存它来使它工作.

如果您只调用session.Merge(实体)两次(在第一次调用后可能必须将id重置为未保存的值),它也可能有效.

或者,您可以使用session.Merge()的无状态会话,然后您不必在Save之间逐出实体.