【发布时间】:2013-03-28 07:33:32
【问题描述】:
我想将我的实体从 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 对象的属性,bar 对象具有 boo 对象的另一个属性等)。
如何使用 NHibernate 执行这样的批量复制? 请注意,源数据库和目标数据库的架构不同。我使用不同的映射来实现这一点。
【问题讨论】:
-
你解决过这个问题吗?我正在做同样的事情。而且我注意到我必须先执行
source.Clear(),然后才能执行保存操作。
标签: c# mysql sqlite nhibernate