Как настроить SQLite для работы с NHibernate, где сборка разрешает System.Data.SQLite? - PullRequest
8 голосов
/ 25 июня 2009

Я использую последнюю версию NHibernate 2.1.0Beta2. Я пытаюсь выполнить модульное тестирование с помощью 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);

Когда я пытаюсь запустить его, я получаю следующую ошибку:

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 

Похоже, мне нужно ссылаться на сборку напрямую. Как бы я это сделал, чтобы больше не получать эту ошибку?

Я скачал последнюю сборку отсюда: http://sourceforge.net/projects/sqlite-dotnet2.

Ответы [ 4 ]

12 голосов
/ 25 июня 2009

Вы используете 64-битную Windows?

Осматривая Google, я увидел несколько постов, в которых комментируется, что файл SQLite dll создан для x86, а не для x64.

Смотрите это сообщение: 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/

6 голосов
/ 04 мая 2010

После добавления ссылки на сборку System.Data.SQLite мне пришлось установить для локального копирования значение true (выберите ссылку на сборку в VS и перейти к свойствам), чтобы сборка была скопирована в каталог bin.

3 голосов
/ 18 декабря 2010

У меня была та же проблема, и вышеупомянутые решения не сработали для меня. Я думаю, что System.Data.SQLite изменился с тех пор.

Обратите внимание, что эта проблема характерна для случая, в котором все соответствуют следующим критериям:

  • с использованием SQLite
  • с System.Data.SqlLite
  • на машине x64
  • и 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 создает объект Assembly, используя его частичное имя в виде строки "System.Data.SQLite". Каким-то образом загруженная версия сборки x86.

Приведенная выше конфигурация убедилась, что использование частичного имени для загрузки сборки предоставит версию x64.

3 голосов
/ 21 июня 2010

Если вы не хотите использовать 64-битную версию System.Data.Sqlite Вы можете изменить «целевой объект платформы» (в Visual Studio Project-> Properties-> Build) на x86.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...