在 ASP.Net Core 中设置 SqlServer - GetRequiredService 导致错误

Mon*_*use 1 c# sql-server asp.net-core

当我添加 sql 数据库时,我在 Startup.cs 中收到一个错误,我不知所措。我输入:

 services.AddDbContext<ModelContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DatabaseConnection")));
Run Code Online (Sandbox Code Playgroud)

好吧,我实际上是从 program.cs 中得到的,但错误源自上面的行。呼叫者:

var context = services.GetRequiredService<ModelContext>();
Run Code Online (Sandbox Code Playgroud)

错误信息是:

Method 'Clone' 
in type 'Microsoft.EntityFrameworkCore.Infrastructure.Internal.SqlServerOptionsExtension' 
from assembly 'Microsoft.EntityFrameworkCore.SqlServer, Version=1.1.5.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' does not have an implementation.
Run Code Online (Sandbox Code Playgroud)

错误来源是:

Microsoft.EntityFrameworkCore.SqlServer
Run Code Online (Sandbox Code Playgroud)

完整的错误信息:

+       Data    {System.Collections.ListDictionaryInternal} System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
        HResult -2146233054 int
        HelpLink    null    string
+       InnerException  null    System.Exception
        Message "Method 'Clone' in type 'Microsoft.EntityFrameworkCore.Infrastructure.Internal.SqlServerOptionsExtension' from assembly 'Microsoft.EntityFrameworkCore.SqlServer, Version=1.1.5.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' does not have an implementation."  string
        Source  "Microsoft.EntityFrameworkCore.SqlServer"   string
        StackTrace  "   at Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer\r\n   at FltCandidates.Startup.<ConfigureServices>b__4_0(DbContextOptionsBuilder options) in C:\\Users\\garry\\source\\repos\\FltCandidates\\FltCandidates\\Startup.cs:line 35\r\n   at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass0_0`1.<AddDbContext>b__0(IServiceProvider p, DbContextOptionsBuilder b)\r\n   at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.DbContextOptionsFactory[TContext](IServiceProvider applicationServiceProvider, Action`2 optionsAction)\r\n   at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass5_0`1.<AddCoreServices>b__0(IServiceProvider p)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, ServiceProvider provider)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass22_0.<RealizeService>b__0(ServiceProvider provider)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)\r\n   at FltCandidates.Program.Main(String[] args) in C:\\Users\\garry\\source\\repos\\FltCandidates\\FltCandidates\\Program.cs:line 26"    string
+       TargetSite  {System.Reflection.RuntimeMethodInfo}   System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}
        TypeName    "Microsoft.EntityFrameworkCore.Infrastructure.Internal.SqlServerOptionsExtension"   string
Run Code Online (Sandbox Code Playgroud)

我的 .CSProj 包含:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" />
    <PackageReference Include="Microsoft.AspNetCore" Version="2.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.5" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.1" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

任何和所有的帮助将不胜感激

该问题在问题下方的评论中得到了回答。SqlServer 最终被安装,但由于某种原因没有显示在 NuGet 中。一旦我尝试安装较新版本的 sqlserver,它就会强制 NuGet 更新已安装的“不可见”SqlServer。

Emi*_*eni 5

.CSproj文件的外观来看,您的项目是一个 .Net Core 2 项目,该项目尚未打包安装Microsoft.EntityFrameworkCore.SqlServer。您可以判断,因为您缺少类似于以下内容的行:

<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.1" />
Run Code Online (Sandbox Code Playgroud)

此包也是Microsoft.EntityFrameworkCore.SqlServer.Desing的依赖项,其当前版本为 1.1.5,并将为Microsoft.EntityFrameworkCore.SqlServer. 这样做的问题是该Clone()方法仅存在于 Entity Framework Core 2 中。话虽如此,您应该安装或更新Microsoft.EntityFrameworkCore.SqlServer包到一个2.0.1版本。此版本兼容Microsoft.EntityFrameworkCore.SqlServer.Desing

希望能帮助到你。