2011-11-07 64 views
0

我想升級我的FNH Automapping項目到最新版本的NHibernate和流利NHibernate(NH 3.2和FNH 1.3),但現在我得到一個「不persister「異常(儘管基類似乎仍然保持正確)。升級NHibernate和FNH DLL - 現在變得「沒有persister」異常

這個派生類自動映射罰款與舊的DLL(FNH 1.0,NH 2.1.2) - 我沒有以任何方式改變我的映射邏輯或這些類。

我升級了我的項目,只是將新的dll複製到舊的dll上,並刪除了對新dll不再需要的dll的引用(例如Antlr 3,Castle)。

精確的版本我使用的是:

的NHibernate 3.2.0.4000
FluentNHibernate 1.3.0.0
System.Data.SQLite 1.0.76.0
VS 2008 9.0.30729.1 SP
的Windows XP SP3(32位)

映射代碼與舊的dll工作,但不是用新的:

  return AutoMap.Assemblies(_assemblies) 
       // Don't map the abstract base class 
       .IgnoreBase<OfeEntity>() 

       // Only map subclasses of OfeEntity 
       .Where(t => t.IsSubclassOf(typeof(OfeEntity))) 

       .Conventions.Add(
        // Do cascading saves on all entities so lists will be 
        // automatically saved 
        DefaultCascade.All(), 

        // Turn on lazy loading, so will only read data that is actually 
        // displayed 
        DefaultLazy.Always() 
       ); 

編輯:

開啓FNH診斷後,我可以看到,FNH不是爲我的新的DLL派生類中創建一個表。

另外,我注意到的一件事 - 沒有被持續的類被分爲2級。也就是說,我有以下類:

public abstract class OfeEntity 

public class OfeMeasurementBase : OfeEntity 

public class OfeDlsMeasurement : OfeMeasurementBase 

OfeDlsMeasurement是不被持久化類。 OfeMeasurementBase以及其他幾個繼承自OfeEntity的類正在被正確保存。

舊版本沒有這個問題 - 也許新版本有一個錯誤,當有多個級別的繼承?

+0

何時遇到此異常?在建立會話工廠時? –

+0

嘗試執行SaveOrUpdate時出現異常。 –

回答

1

我把我們的項目從一些較舊的(F)NH遷移到最新的NH 3.2。我懷疑它現在在集合中使用了不同的鍵字段名稱,因爲我需要在使用現有數據庫時指定確切的列名稱。另外,我建議使用NHibernate 3.2從源代碼重建流利的NHibernate,以確保所有的東西都在這個地方。

1

文章How to upgrade your apps to NHibernate 3.2 with Fluent NHibernate 1.2可能會對您有所幫助。我自己使用它來升級一個項目,它工作。

+0

謝謝,希望我在創建這篇文章時能找到那篇文章!一個問題 - 我是否真的需要明確設置默認代理工廠?試了這個,並得到「無法找到DefaultProxyFactoryFactory」編譯錯誤。 –

+0

這似乎是必要的。在我的項目中,當我離開它時,我會遇到「無效或不完整的配置」異常。我認爲Fluent使用_​​NHibernate.ByteCode.Castle_作爲默認值,這不再包含在3.2中 – Wolfgang

相關問題