简体   繁体   English

Effort + Autofac:未返回从DbProviderServices继承的对象

[英]Effort + Autofac : did not return an object that inherits from DbProviderServices

I'm using Effort , Effort.EF6 as my In-Memory database to test my Web API 2 application. 我正在使用EffortEffort.EF6作为我的内存数据库来测试Web API 2应用程序。

I'm using Autofac for my DI resolve. 我使用Autofac解决我的DI问题。

This is my code in Startup.cs 这是我在Startup.cs代码

builder.Register(c =>
                {
                    var dbConnectionFactory =
                        Effort.DbConnectionFactory.CreatePersistent(nameof(CvManagementDbContext));
                    return new CvManagementDbContext(dbConnectionFactory);
                })
                .As<DbContext>()
                .SingleInstance();

And in my CvManagementDbContext.cs : 在我的CvManagementDbContext.cs

public CvManagementDbContext(DbConnection connection)
            : base(connection, true)
        {
        }

[UPDATE] [UPDATE]

This is my package.config 这是我的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>

The configuration of Effort in Web.config Web.config配置Effort

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

When my application starts an exception thrown in the console, which is : 当我的应用程序启动时,控制台中引发了一个异常:

'The 'Instance' member of the Entity Framework provider type 'Effort.Provider.EffortProviderServices, Effort, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46696d54971e6d' did not return an object that inherits from 'System.Data.Entity.Core.Common.DbProviderServices'. 实体框架提供程序类型'Effort.Provider.EffortProviderServices,Effort,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 6a46696d54971e6d的'Instance'成员未返回继承自'System.Data.Entity的对象。 Core.Common.DbProviderServices'。 Entity Framework providers must inherit from this class and the 'Instance' member must return the singleton instance of the provider. 实体框架提供程序必须从此类继承,并且“实例”成员必须返回提供程序的单例实例。 This may be because the provider does not support Entity Framework 6 or later; 这可能是因为提供程序不支持Entity Framework 6或更高版本。 see http://go.microsoft.com/fwlink/?LinkId=260882 for more information.' 有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=260882

What wrong am I doing ? 我在做什么错?

I think, I managed to reproduced your issue. 我想,我设法重现了您的问题。 You see Effort and Effort.EF6 are mutually exclusive libraries, you only one of them. 您会看到EffortEffort.EF6是互斥的库,您只是其中之一。 According to Effort github : 根据努力github

If you use Entity Framework 6... 如果您使用Entity Framework 6 ...

  • You will need the Effort.EF6 package 您将需要Effort.EF6软件包
  • Check the offical NuGet site 检查官方的NuGet网站

otherwise... 除此以外...

  • You will need the Effort package 您将需要努力包
  • Check the offical NuGet site 检查官方的NuGet网站

I got your error when I have reference to dll from Effort package in my csproj file: 当我从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>

The error is gone when I have changed reference to dll from Effort.EF6 package: 当我更改了对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>

Check references in your csproj file, make sure, that you use dll from Effort.EF6 . 检查csproj文件中的引用,确保使用Effort.EF6 dll。 And get rid of Effort package. 并摆脱Effort包。 Hope it helps. 希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM