如何在NHibernate中的会话之间复制对象

时间:2013-04-05 19:00:20

标签: c# mysql sqlite nhibernate

我想将我的实体从MySQL数据库复制到全新的SQLite数据库(导出)。 我有以下代码:

IEnumerable<Foo> fooList;
using (var sf = CreateMySqlSessionFactory("user", "password"))
using (var source = sf.OpenSession())
using (var sf2 = Class1.CreateSqliteSessionFactory(outputPath))
using (var dest = sf2.OpenSession())
{
     fooList = source.Query<Foo>();
     foreach (var foo in fooList)
     {
         dest.SaveOrUpdate(foo);
     }
     dest.Flush();
}

创建两个会话工厂都没有问题。不幸的是,SaveOrUpdate抛出了LazyInitializationException,并带有消息:

非法尝试将代理与两个打开的会话相关联

我知道两个会话都是开放的,但我找不到任何简洁的解决方案。 我唯一能找到的就是深入克隆每个foo,这太麻烦了(foo具有bar对象的属性,还有boo对象的其他属性等。)

如何使用NHibernate执行此类批量复制? 请注意,源和目标数据库的架构不一样。我使用不同的映射来实现这一点。

1 个答案:

答案 0 :(得分:0)

您是否尝试使用以下方法从会话中分离foo:

source.Evict(foo)