我正在使用Effort
,Effort.EF6
作为内存数据库来测试我的Web API 2
应用程序。
我正在使用Autofac
进行DI解析。
这是我在Startup.cs
中的代码
builder.Register(c =>
{
var dbConnectionFactory =
Effort.DbConnectionFactory.CreatePersistent(nameof(CvManagementDbContext));
return new CvManagementDbContext(dbConnectionFactory);
})
.As<DbContext>()
.SingleInstance();
在我的CvManagementDbContext.cs
中:
public CvManagementDbContext(DbConnection connection)
: base(connection, true)
{
}
[更新]
这是我的package.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ApiMultipartFormDataFormatter" version="1.0.3" targetFramework="net452" />
<package id="Autofac" version="4.8.1" targetFramework="net46" />
<package id="Autofac.WebApi2" version="4.2.0" targetFramework="net46" />
<package id="AutoMapper" version="7.0.1" targetFramework="net46" />
<package id="AutoMapper.EF6" version="1.1.1" targetFramework="net46" />
<package id="DelegateDecompiler" version="0.24.0" targetFramework="net46" />
<package id="DelegateDecompiler.EntityFramework" version="0.24.0" targetFramework="net46" />
<package id="Effort" version="1.3.10" targetFramework="net46" />
<package id="Effort.EF6" version="1.3.10" targetFramework="net46" />
<package id="EntityFramework" version="6.2.0" targetFramework="net46" />
<package id="JWT" version="4.0.0" targetFramework="net46" />
<package id="Microsoft.AspNet.Cors" version="5.2.6" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi" version="5.2.6" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.6" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.6" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.6" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.6" targetFramework="net46" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net46" />
<package id="Microsoft.Net.Compilers" version="2.9.0" targetFramework="net46" developmentDependency="true" />
<package id="Microsoft.Owin" version="4.0.0" targetFramework="net46" />
<package id="Microsoft.Owin.Host.SystemWeb" version="4.0.0" targetFramework="net46" />
<package id="Mono.Reflection" version="1.1.0.0" targetFramework="net46" />
<package id="Mono.Reflection.Core" version="1.1.1" targetFramework="net46" />
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net46" />
<package id="NMemory" version="2.0.4" targetFramework="net46" />
<package id="Owin" version="1.0" targetFramework="net46" />
<package id="ServiceStack.Common" version="5.4.0" targetFramework="net46" />
<package id="ServiceStack.Interfaces" version="5.4.0" targetFramework="net46" />
<package id="ServiceStack.Redis" version="5.4.0" targetFramework="net46" />
<package id="ServiceStack.Text" version="5.4.0" targetFramework="net46" />
<package id="System.Buffers" version="4.5.0" targetFramework="net46" />
<package id="System.Memory" version="4.5.1" targetFramework="net46" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.1" targetFramework="net46" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net46" />
</packages>
Web.config
中的工作量配置
<entityFramework>
<interceptors>
<interceptor type="Cv_Management.Interceptor.GlobalDbCommandInterceptor, Cv_Management" />
</interceptors>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<!--<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />-->
<provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices,Effort" />
</providers>
</entityFramework>
当我的应用程序启动时,控制台中引发了一个异常,即:
“实体框架提供程序类型为'Effort.Provider.EffortProviderServices,Effort,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 6a46696d54971e6d的'Instance'成员未返回继承自' System.Data.Entity.Core.Common.DbProviderServices”。实体框架提供程序必须从此类继承,并且“实例”成员必须返回提供程序的单例实例。这可能是因为提供程序不支持Entity Framework 6或更高版本。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=260882。
我在做什么错?
答案 0 :(得分:1)
我认为,我设法转载了您的问题。您会看到Effort
和Effort.EF6
是互斥的库,您只是其中之一。根据努力github:
如果您使用Entity Framework 6 ...
- 您将需要Effort.EF6软件包
- 检查正式的NuGet网站
否则...
- 您将需要努力包
- 检查正式的NuGet网站
当我在csproj文件中的Effort
包中引用dll时,出现了您的错误:
<Reference Include="Effort, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46696d54971e6d, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Effort.1.3.10\lib\net45\Effort.dll</HintPath>
</Reference>
当我从Effort.EF6
包中更改了对dll的引用时,错误消失了:
<Reference Include="Effort, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46696d54971e6d, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Effort.EF6.1.3.10\lib\net45\Effort.dll</HintPath>
</Reference>
检查csproj文件中的引用,确保使用Effort.EF6
中的dll。并摆脱Effort
包。希望对您有所帮助。