如何在NHibernate的会话之间复制对象
本文关键字:之间 复制 对象 会话 NHibernate | 更新日期: 2023-09-27 18:07: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执行这样的批量复制?请注意,源数据库和目标数据库的模式不相同。我使用了不同的映射来实现。
是否尝试使用:
从会话中分离foosource.Evict(foo)