Как настроить SQLite для работы с NHibernate, где сборка разрешает систему.Данные.На SQLite?

Я использую последнюю версию 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:CSharpNHnhibernatesrcNHibernateDriverReflectionBasedDriver.cs: line 26
at NHibernate.Driver.SQLite20Driver..ctor() in c:CSharpNHnhibernatesrcNHibernateDriverSQLite20Driver.cs: line 28 

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

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

4 ответов


вы используете 64-разрядную Windows?

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

см. этот пост:http://codetripper.wordpress.com/2009/01/03/using-sqlite-on-vista-64-bit/

Edit: я не уверен, когда, но я заметил сегодня, что последние выпуски System.Data.SQLite включить dll x64. Архитектуры x64 .DLL находится в \bin\x64.

http://sqlite.phxsoftware.com/


после добавления ссылки на систему.Данные.Сборка SQLite, я должен был установить copy local в true (выберите ссылку на сборку в VS и перейдите к свойствам), чтобы сборка была скопирована в каталог bin.


Если вы не хотите использовать 64-разрядную версию системы.Данные.Базы данных SQLite Вы можете изменить "цель платформы" (в проекте visual studio->свойства->сборка) на x86.


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

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

  • использование SQLite
  • С системой.Данные.SqlLite
  • на машине x64
  • и NHibernate (2.1.2.4 в моем случае)

этот кусок конфигурации в моем интернете.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.Данные.Данных SQLite". Каким-то образом загрузилась версия сборки x86.

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