0

我想将我的实体从 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 执行这样的批量复制?请注意,源数据库和目标数据库的架构不同。我使用不同的映射来实现这一点。

4

1 回答 1

0

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

source.Evict(foo)
于 2013-04-05T20:04:20.970 回答