2009-11-10 83 views
3

我試圖通過「Your first NHibernate based application」來獲取其他類型的ORM(我習慣於DevExpress' XPO),我知道tut使用的版本和最新的可用版本之間存在差異。無法加載類型'NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu'

當我嘗試運行can_add_new_product測試時,我得到了標題爲這個問題的錯誤。

  1. 我添加了一個參考NHibernate.ByteCode.LinFu(CopyLocal =真)
  2. 我添加了屬性到我的hibernate.cfg.xml像這樣(間隔開,以多行爲可讀性):

    NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu

而且我確信,我跑在x86的構建。

我還能做些什麼來解決這個問題?

+0

我只是做這個教程,看看我是否得到相同的錯誤。你能確認你使用的是2.1.0GA嗎? – Wayne 2009-11-12 02:05:03

回答

7

在該節點的完整語法應該是這樣的:

<property name="proxyfactory.factory_class"> 
    NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu 
</property> 

您可以驗證這是你的全部文本?還請確保您的DLL具有以下內容:

LinFu.DynamicProxy.dll 
NHibernate.ByteCode.LinFu.dll 

希望這會有所幫助。我用這個延遲加載,並將其與2.1.0GA分支成功作品(即使我們的分支機構有一些樹幹回遷修復(SqlServerCE問題)

更新1

好吧,在我的項目我參考下面的組件:

  • Antlr3.Runtime.dll
  • Iesi.Collections.dll
  • LinFu.DynamicProxy.dll
  • log4net.dll
  • NHibernate.byteCode.LinFu.dll
  • NHibernate.dll

你也可以發表您充分的hibernate.cfg.xml,NHibernate的配置文件?

更新2

是否啓用log4net的輸出?我發現最簡單的方法是從代碼中獲得。試着在你的代碼做這樣的事情,所以你可以得到一些先進的日誌記錄:

FileAppender appender = new FileAppender(); 

appender.File = "nhibernate.log"; 
appender.LockingModel = new FileAppender.MinimalLock(); 
appender.ImmediateFlush = true; 

pattern = "%timestamp, %thread, %level, %logger, %ndc,%message %newline"; 
PatternLayout pl = new PatternLayout(pattern); 

appender.Layout = pl; 
appender.ActivateOptions(); 
appender.Threshold = log4net.Core.Level.Verbose; 

log4net.Config.BasicConfigurator.Configure(appender); 

有了這個輸出,我們也許能夠進一步找到問題的原因是什麼。

將很高興得到您的項目的副本,以便我可以調查並幫助您找到您的錯誤的原因。

更新3

好了,我也跟着教程,這些都是我的筆記,我能得到一個正在運行的實例到更新執行:

  • 添加的虛擬子句FirstSolution /Domain/Product.cs
  • 新增LinFu.DynamicProxy和NHibernate.ByteCode.LinFu組件,以FirstSolution文件
  • 新增NHibernate.ByteCode.LinFu.Prox yFactoryFactory,NHibernate.ByteCode.LinFu到配置文件
  • 更改了新的SchemaExport(cfg).Execute(false,true,false,false);到新的SchemaExport(cfg).Execute(false,true,false);
+0

我可以驗證我有相同的。最初我只引用字節碼程序集,但引用它們都不會改變任何內容。仍然沒有骰子。 – 2009-11-11 23:12:40

+0

原來,我在錯誤的項目中引用了程序集。我沒有在測試項目中引用linfu程序集(我在原始項目中做過)。謝謝你的幫助。 – 2009-11-12 17:37:51

+0

啊!至少我們發現了問題所在。很高興我能幫上忙。 – Wayne 2009-11-12 22:56:47

0

我使用了Castle Proxy而不是linfu,但是即使我得到了類似的錯誤。我的問題是,由於代理類是動態加載的,因此Visual Studio不會將所有依賴項正確地複製到bin目錄或bin \ debug目錄中。檢查你的編譯輸出目錄,如果下面的文件不存在,將其複製過來,然後測試

LinFu.DynamicProxy.dll NHibernate.ByteCode.LinFu.dll

1

添加一個app.config(應用程序配置文件)到您的測試項目,並粘貼以下進去後:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 

    <property name="connection.connection_string">ADD CON STRING</property> 

    <property name="connection.isolation">ReadCommitted</property> 
    <property name="default_schema">dbo</property> 
    <property name="show_sql">true</property> 
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 



    <property name="cache.use_second_level_cache">false</property> 
    <property name="cache.use_query_cache">false</property> 
    <!-- HBM Mapping Files --> 
    <mapping assembly="Namespace.Assembly"/> 
    </session-factory> 
</hibernate-configuration> 

改變映射總裝線,並添加您的連接字符串。 App.Config需要在正在運行的文件中 - 即。測試程序集,而不是域程序集。

不是說它對基本的NHibernate測試項目很重要,但通常認爲城堡字節碼實現更好。

What are the differences between LinFu.DynamicProxy and Castle.DynamicProxy?

相關問題