2013-04-05 27 views
0

我想將我的實體從MySQL數據庫複製到全新的SQLite數據庫(導出)。 我有下面的代碼:如何在NHibernate中的會話之間複製對象

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

你有沒有解決這個問題? 我正在做同樣的事情。我注意到在執行保存操作之前,我必須執行'source.Clear()'。 – Markus 2015-03-27 07:23:48

回答

0

您是否嘗試過在會話中使用分離富:

source.Evict(foo) 
+0

仍然是同樣的錯誤。也許,我將不得不逐出foo,foo.bar,foo.bar.boo等。 – dzendras 2013-04-05 23:21:11

相關問題