SQLite выдает исключение с NH 3.2

Запуск Nh 3.2 с использованием SQLite вызывает следующее исключение:

---> NHibernate.HibernateException: не удалось создать драйвер из NHibernate.Driver.SQLite20Driver, NHibernate, Version = 3.2.0.4000, Culture = нейтральный, PublicKeyToken = aa95f207798dfdb4. ---> System.Reflection.TargetInvocationException: исключение было создано целью вызова. ---> System.ArgumentException: не удалось найти запрошенный поставщик данных .Net Framework. Может не быть установлен.

Я использую последнюю (совместимую с net 4) версию SQlite: версия 1.0.74.0. Я добавил в свою конфигурацию следующее:

.Database(SQLiteConfiguration.Standard.InMemory().Raw("hbm2ddl.keywords", "none").ShowSql())

Я также добавил в конфигурационный файл:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

Странно то, что сначала это сработало. И теперь я получаю указанную выше ошибку.


person halcwb    schedule 27.08.2011    source источник


Ответы (3)


Я исправил проблему, используя решение, указанное выше (спасибо), но также выяснил, что с помощью nuget вы можете просто установить System.data.sqlite прямо в свой проект через диспетчер пакетов, и вам не нужны какие-либо настройки web.config .

Install-Package System.Data.Sqlite.x86
person Baldy    schedule 12.01.2012
comment
Это действительно было самое удобное и простое решение. Использование NuGet в качестве диспетчера пакетов в целом очень удобно! - person halcwb; 20.01.2012

Вы наверняка это знаете, но на всякий случай. Последняя версия SQLite для .NET - это Распространяется как 2 dll.

  • System.Data.SQLite.dll
  • SQLite.Interop.dll

Обе библиотеки должны находиться в той же папке, что и ваш EXE. Interop dll зависит от платформы, поэтому вам нужно вручную (или после сборки) скопировать версию x86 или x64. Следует помнить, что SQLite.Interop.dll зависит от MSVCR100.DLL. Это часть распространяемого пакета Visual C ++ 2010 SP1, вам необходимо убедиться, что он у вас есть. См. Этот ответ.

Также в веб-среде вам может понадобиться такая конфигурация:

<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SQLite"/>
        <add 
          name="SQLite Data Provider" 
          invariant="System.Data.SQLite" 
          description=".Net Framework Data Provider for SQLite" 
          type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>
    </DbProviderFactories>
</system.data>
person Dmitry    schedule 27.08.2011
comment
Спасибо, у меня все работает с предыдущей версией SqlLite 1.0.65.1. Почему не работает с последней версией, я не знаю. - person halcwb; 28.08.2011
comment
Следует иметь в виду, что SQLite.Interop.dll зависит от MSVCR100.DLL. Это MS C Runtime, вам нужно убедиться, что она у вас есть. - person Dmitry; 28.08.2011

используйте версию, поставляемую с двоичными файлами fluentnhibernate 1.0.60.0

person Eminem    schedule 29.11.2011