我想将我的实体从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执行此类批量复制? 请注意,源和目标数据库的架构不一样。我使用不同的映射来实现这一点。
答案 0 :(得分:0)
您是否尝试使用以下方法从会话中分离foo:
source.Evict(foo)