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