1

任何人都可以帮助解决这个问题..我在谷歌搜索后尝试了一些保存的东西,但没有运气......

在我的项目中运行固定装置时会发生此错误。

NHibernate.HibernateException:无法从 NHibernate.Driver.SQLite20Driver 创建驱动程序。System.Reflection.TargetInvocationException :调用目标引发了异常。System.ArgumentException:找不到请求的 .Net Framework 数据提供程序。它可能没有安装

这是堆栈跟踪

at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
    at NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings)
    at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings)
    at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 properties)
    at NHibernate.Cfg.Configuration.BuildSettings()
    at NHibernate.Cfg.Configuration.BuildSessionFactory()
    at MyApp.Common.Testing.UnitOfWorkTestContext.NHibernateUnitOfWorkTestContext.get_SessionFactory() in UnitOfWorkTestContext.cs: line 199
    at MyApp.Common.Testing.UnitOfWorkTestContext.NHibernateUnitOfWorkTestContext.IntialiseContainerAndUowFactory() in UnitOfWorkTestContext.cs: line 243
    at MyApp.Common.Testing.DatabaseFixture.OneTimeSetup() in DataBaseFixture.cs: line 66
    --TargetInvocationException
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, ref Boolean canBeCached, ref RuntimeMethodHandleInternal ctor, ref Boolean bNeedSecurityCheck)
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
    at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type)
    at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
    --ArgumentException
    at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
    at NHibernate.Driver.ReflectionBasedDriver..ctor(String providerInvariantName, String driverAssemblyName, String connectionTypeName, String commandTypeName)
    at NHibernate.Driver.SQLite20Driver..ctor()

我试图通过更改测试设置并通过包管理器控制台加载所需的 sql lite 包来解决它。我正在运行 64 位系统。任何机构都可以帮助我找出可能是什么问题吗?

请帮忙,谢谢

4

2 回答 2

2

本机 SqlLite dll 是在编译路径中还是在全局程序集缓存中?

您是否有本机 SqLite.dll 的 64 位版本(SqLite dll 包含非托管代码,并且必须具有与您的项目构建相同的 (64/32))。

如果您强制您的项目构建为 32 位,那么它可以工作吗?

于 2013-02-13T13:29:39.467 回答
1

好的,我厌倦了每次升级都修复和重新修复这个问题,我希望通过在此处写下来来节省自己未来的故障排除。

我正在使用 NHibernate 3.3.3.4000

我正在使用 SqlLite 3.6.23.1,但 dll 文件属性版本显示为 1.0.66.0

  1. 使您的单元测试项目平台以任何 CPU 为目标(我知道有人说您需要指定架构,但我发现情况并非如此)
  2. 在项目中引用 System.Data.SQLite.dll
  3. 在项目中引用一个配套的 System.Data.SQLLite.Linq.dll(它应该与 System.Data.SQLite.dll 一起提供)我不确定 NHibernate 是否需要这个 dll。

在我的 app.config 中,我需要一个 system.data 部分:

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

我使用内存数据库,我的连接字符串(没有所有 fluentnhibernate 的东西)看起来像:

Data Source=:memory:;Version=3;New=True;Pooling=True;Max Pool Size=1;
于 2014-03-30T18:41:14.480 回答