2009-06-24 9 views
8

私は最新のNHibernate 2.1.0Beta2を使用しています。私が必要とするようなので、それが見えますアセンブリがSystem.Data.SQLiteを解決するNHibernateで実行するようにSQLiteを設定する方法?

NHibernate.HibernateException: The IDbCommand and IDbConnection implementation in the assembly System.Data.SQLite could not be found. Ensure that the assembly System.Data.SQLite is located in the application directory or in the Global Assembly Cache. If the assembly is in the GAC, use <qualifyAssembly/> element in the application configuration file to specify the full name of the assembly. 
at NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName, String connectionTypeName, String commandTypeName) in c:\CSharp\NH\nhibernate\src\NHibernate\Driver\ReflectionBasedDriver.cs: line 26 
at NHibernate.Driver.SQLite20Driver..ctor() in c:\CSharp\NH\nhibernate\src\NHibernate\Driver\SQLite20Driver.cs: line 28 

を:私はSQLiteのでユニットテストしようとして設定した構成持っている:私はそれを実行しようとすると、私は次のエラーを取得する

 Dictionary<string, string> properties = new Dictionary<string, string>(); 
     properties.Add("connection.driver_class", "NHibernate.Driver.SQLite20Driver"); 
     properties.Add("dialect", "NHibernate.Dialect.SQLiteDialect"); 
     properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider"); 
     properties.Add("query.substitutions", "true=1;false=0"); 
     properties.Add("connection.connection_string", "Data Source=test.db;Version=3;New=True;"); 
     properties.Add("proxyfactory.factory_class", 
         "NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu"); 

     configuration = new Configuration(); 
     configuration.SetProperties(properties); 

をアセンブリを直接参照する。私はこれをどうすれば私はもうこのエラーが出ませんか?

最新のアセンブリは、http://sourceforge.net/projects/sqlite-dotnet2からダウンロードしました。

+0

誰かがこの質問に実行され、この答えの更新バージョンを探している場合 -
この正確な問題についての私のブログでの投稿はずっと更新ここでの回答よりも...
[のhttp:// debuggerstepthrough.blogspot.co.il/2011/08/unit-testing-fluentnhibernate.html(http://debuggerstepthrough.blogspot.co.il/2011/08/unit-testing-fluentnhibernate.html) – gillyb

+0

コードはsqlite-dotnet2はアプリケーションディレクトリにありますか? (またはGACに登録されていますか?) – Jay

+0

私は、プロジェクトのリファレンスでSystem.Data.SQLite.DLLへの参照を持っています。私は単位テスト(Resharperユニットテストランナーを通して)を実行すると仮定しています。それはそれをコピーします。 –

答えて

12

64ビットWindowsを実行していますか?

Googleの周りを見ると、SQLite dllファイルがx64ではなくx86用に作成されているとのコメントがいくつか掲載されていました。

はこの記事を参照してください:http://codetripper.wordpress.com/2009/01/03/using-sqlite-on-vista-64-bit/

編集:を私はときのようにわからないんだけど、私はSystem.Data.SQLiteの最新のリリースでは、x64のdllファイルが含まれていることを今日気づきました。 x64 .dllは\bin\x64にあります。

http://sqlite.phxsoftware.com/

+0

それはそうしました。助けてくれてありがとう。 –

+7

ユニットテストプロジェクトを常に(プロジェクトプロパティの[ビルド]タブで)x86にコンパイルするように設定することができます.64ビットウィンドウを使用していない開発者間でプロジェクトが共有されている場合は、 – nachojammers

6

System.Data.SQLiteアセンブリへの参照を追加した後、私は、アセンブリがコピーされるように(VSでアセンブリ参照を選択して、プロパティにアクセスしてください)trueにローカルコピーを設定する必要がありましたbinディレクトリに移動します。

3

System.Data.Sqliteの64ビット版を使用したくない場合 (ビジュアルスタジオのプロジェクト - >プロパティ - >ビルドの)「プラットフォームターゲット」をx86に変更できます。

+0

これも私のために働いた。 –

3

私は同じ問題を抱えていましたが、上記の解決策は私にとってはうまくいかなかったのです。私はSystem.Data.SQLiteが以来変わったと思う。この問題は、次の条件の全て尊重場合に特異的であることを

注:x64のマシン上System.Data.SqlLite

  • とSQLiteの
  • を用い

    • とNHibernate(私の場合は2.1.2.4)

    私の設定のチャンクweb.config(または単体テスト用のapp.config)が動作するようになりました。私は彼が正しくロードすることを確認するためにアセンブリを修飾しなければならなかった。

    <configuration> 
        <runtime> 
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
         <qualifyAssembly 
         partialName="System.Data.SQLite" 
         fullName="System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64" /> 
        </assemblyBinding> 
        </runtime> 
    </configuration> 
    

    はどこかでスキャンしたアセンブリを使用してマッピングの際に、内側の配管だ、NHibernateのは、文字列、「System.Data.SQLite」として、それは部分的な名前だ使ってAssemblyオブジェクトを作成します。どうにかして、x86版のアセンブリがロードされました。

    上記の構成では、部分名を使用してアセンブリをロードすると、x64バージョンが提供されることが確認されています。

  • 関連する問題