SQLite使用NH 3.2引发异常

时间:2011-08-27 12:58:11

标签: nhibernate system.data.sqlite

使用SQLite运行Nh 3.2会引发以下异常:

---> NHibernate.HibernateException:无法从NHibernate.Driver.SQLite20Driver,NHibernate,Version = 3.2.0.4000,Culture = neutral,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>

奇怪的是,它首先起作用了。现在我得到了上述错误。

3 个答案:

答案 0 :(得分:11)

我使用上面提供的解决方案修复了这个问题(谢谢),但也想通过使用nuget你只需通过包管理器直接将System.data.sqlite安装到你的项目中,你就不需要任何web .config设置。

Install-Package System.Data.Sqlite.x86

答案 1 :(得分:1)

你可能知道这一点,但以防万一。最新版本的SQLite for .NET分发为2个dll。

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

两个dll都需要与EXE位于同一个文件夹中。 Interop dll是特定于平台的,因此您必须手动(或后期构建)复制x86或x64 版本。要记住的一件事是 SQLite.Interop.dll 取决于 MSVCR100.DLL 。这是Visual C ++ 2010 SP1可再发行组件包的一部分,您需要确保拥有它。请参阅此answer

同样在Web环境中,您可能需要此配置:

<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>

答案 2 :(得分:0)

使用fluentnhibernate二进制文件1.0.60.0附带的版本