NU1107:为Microsoft.EntityFrameworkCore.Abstractions检测到版本冲突.安装EFCore与AspNetCore 2.2一起使用 [英] NU1107: Version conflict detected for Microsoft.EntityFrameworkCore.Abstractions. Installing EFCore for use with AspNetCore 2.2

查看:274
本文介绍了NU1107:为Microsoft.EntityFrameworkCore.Abstractions检测到版本冲突.安装EFCore与AspNetCore 2.2一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我能够升级.NetStandard2.0项目以使用EntityFrameworkCore 3.1.4,并创建了一个nuget包.

现在我想在我的netcoreapp2.2项目中使用该nuget包.

但是,当我尝试通过nuget添加软件包时,我得到了

为Microsoft.EntityFrameworkCore检测到

 错误NU1107版本冲突.直接安装/引用Microsoft.EntityFrameworkCore 3.1.4到项目MyApi即可解决此问题.MyApi->SBDSTD.Standard 1.0.0-CI-20200526-230146->Microsoft.EntityFrameworkCore(> = 3.1.4)MyApi->Microsoft.AspNetCore.App 2.2.0->Microsoft.EntityFrameworkCore(> = 2.2.0&< 2.3.0).MyApi D:\ dev \ MyApi \ MyApi \ MyApi.csproj 1 

所以我尝试使用安装实体框架包

 安装软件包Microsoft.EntityFrameworkCore-版本3.1.4 

我知道了

  NU1608:在依赖关系约束之外检测到的程序包版本:Microsoft.AspNetCore.App 2.2.0需要Microsoft.EntityFrameworkCore(> = 2.2.0&< 2.3.0),但版本是Microsoft.EntityFrameworkCore3.1.4已解决.Install-Package:NU1107:为Microsoft.EntityFrameworkCore.Abstractions检测到版本冲突.直接将Microsoft.EntityFrameworkCore.Abstractions 3.1.4安装/引用到项目MyApito解决此问题.MyApi->Microsoft.EntityFrameworkCore 3.1.4->Microsoft.EntityFrameworkCore.Abstractions(> = 3.1.4)MyApi->Microsoft.AspNetCore.App 2.2.0->Microsoft.EntityFrameworkCore.Abstractions(> = 2.2.0&< 2.3.0).在第1行:char:1+安装包Microsoft.EntityFrameworkCore-版本3.1.4+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo:未指定:(:) [Install-Package],异常+ FullyQualifiedErrorId:NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand 

我都不愿意开始尝试安装建议方案,因为我刚刚失去了半天的软件包管理器UI做类似的事情[更新]当我开始通过Nuget开始安装时,我会看到一条消息

在依赖项约束之外检测到的程序包版本:Microsoft.EntityFrameworkCore.Abstractions(> = 2.2.0&&< 2.3.0)但版本Microsoft.EntityFrameworkCore.Abstractions 3.1.5已解决

如果我将库回退到使用EntityFrameworkCore 2.2.0,并且不得不将所有Microsoft.Data.SqlClient更改为System.Data.SqlClient引用.

[更新]遵循Lauxjpn的建议并粘贴到我得到的参考文献中

我开始尝试解决错误.我遇到的第一个错误是

 使用Remotion.Linq.Clauses; 

我只是将其注释掉了.

那我就达到了

  CS0619'RelationalQueryableExtensions.FromSql< TEntity>(IQueryable< TEntity> ;, RawSqlString,params object [])'已过时:'要使用纯字符串从SQL查询返回对象,请改用FromSqlRaw.要使用插值字符串语法从SQL查询返回对象以创建参数,请改用FromSqlInterpolated.直接在查询根目录的DbSet上调用任一新方法 

解决方案

潜在的问题是 Microsoft.AspNetCore.App 元数据包引用了EF Core的特定版本范围(和其他)软件包.

[...]直接安装/引用Microsoft.EntityFrameworkCore 3.1.4,以投影MyApi即可解决此问题.

一个简单的解决方案是执行此操作,该消息告诉您:将要覆盖的软件包版本明确添加到目标项目中.

假设一个简单的原始项目文件如下:

 < Project Sdk ="Microsoft.NET.Sdk.Web">< PropertyGroup>< TargetFramework> netcoreapp2.2</TargetFramework>< AspNetCoreHostingModel> InProcess</AspNetCoreHostingModel></PropertyGroup>< ItemGroup>< PackageReference Include ="Microsoft.AspNetCore.App";/>< PackageReference Include ="Microsoft.AspNetCore.Razor.Design";版本="2.2.0&"PrivateAssets =全部"./></ItemGroup></Project> 

然后,以下内容将使您的项目编译:

 < Project Sdk ="Microsoft.NET.Sdk.Web">< PropertyGroup>< TargetFramework> netcoreapp2.2</TargetFramework>< AspNetCoreHostingModel> InProcess</AspNetCoreHostingModel></PropertyGroup>< ItemGroup>< PackageReference Include ="Microsoft.AspNetCore.App";/>< PackageReference Include ="Microsoft.AspNetCore.Razor.Design";版本="2.2.0&"PrivateAssets =全部"./></ItemGroup><!-手动覆盖我们关心的所有有冲突的软件包及其依赖项,由"Microsoft.AspNetCore.App"引用.->< ItemGroup>< PackageReference Include ="Microsoft.EntityFrameworkCore.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Analyzers"版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Design";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.InMemory";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Relational";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.SqlServer";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Tools";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Caching.Abstractions";版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.Caching.Memory"版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.Configuration";版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.Configuration.Abstractions";版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.Configuration.Binder";版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.DependencyInjection";版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.DependencyInjection.Abstractions";版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.Logging";版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.Logging.Abstractions";版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.Options"版本="3.1.4"./>< PackageReference Include ="Microsoft.Extensions.Primitives";版本="3.1.4"./></ItemGroup></Project> 

但是,这将导致一些警告.如果您不希望使用这些文件,则必须引用各个程序包,这些程序包是 Microsoft.AspNetCore.App 元数据包为您方便地组合而成的,并适当地更新了它们的版本:

 < Project Sdk ="Microsoft.NET.Sdk.Web">< PropertyGroup>< TargetFramework> netcoreapp2.2</TargetFramework>< AspNetCoreHostingModel> InProcess</AspNetCoreHostingModel></PropertyGroup>< ItemGroup><!-不再使用meta包.我们将明确引用而是所有实际的软件包.<!-< PackageReference Include ="Microsoft.AspNetCore.App";/>->< PackageReference Include ="Microsoft.AspNetCore.Razor.Design";版本="2.2.0&"PrivateAssets =全部"./></ItemGroup><!-手动包含"Microsoft.AspNetCore.App"中的所有软件包,并更新所有与ASP.NET Core不相关的软件包版本.->< ItemGroup>< PackageReference Include ="Microsoft.AspNet.WebApi.Client";版本="5.2.6"/>< PackageReference Include ="Microsoft.AspNetCore.Antiforgery";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.Cookies";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.Core";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.Facebook";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.Google"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.JwtBearer";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.MicrosoftAccount"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.OAuth";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.OpenIdConnect";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.Twitter";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication.WsFederation";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authentication";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authorization.Policy";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Authorization";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Connections.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.CookiePolicy";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Cors";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Cryptography.Internal";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Cryptography.KeyDerivation";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.DataProtection.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.DataProtection.Extensions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.DataProtection";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Diagnostics.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Diagnostics.HealthChecks"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Diagnostics";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.HostFiltering";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Hosting.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Hosting.Server.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Hosting";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Html.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Http.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Http.Connections.Common";版本="1.1.0"/>< PackageReference Include ="Microsoft.AspNetCore.Http.Connections";版本="1.1.0"/>< PackageReference Include ="Microsoft.AspNetCore.Http.Extensions"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Http.Features";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Http";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.HttpOverrides";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.HttpsPolicy";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Identity.EntityFrameworkCore";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Identity.UI";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Identity";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.JsonPatch";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Localization.Routing";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Localization";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.MiddlewareAnalysis";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Analyzers";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.ApiExplorer";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Core";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Cors";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.DataAnnotations";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Formatters.Json"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Formatters.Xml";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Localization";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Razor.Extensions"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.Razor";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.RazorPages";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.TagHelpers";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc.ViewFeatures";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Mvc";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.NodeServices";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Owin";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Razor.Design";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Razor.Language";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Razor.Runtime";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Razor";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.ResponseCaching.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.ResponseCaching";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.ResponseCompression";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Rewrite";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Routing.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Routing";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Server.HttpSys"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Server.IIS";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Server.IISIntegration";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Server.Kestrel.Core";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Server.Kestrel.Https"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets"版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Server.Kestrel";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.Session";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.SignalR.Common";版本="1.1.0"/>< PackageReference Include ="Microsoft.AspNetCore.SignalR.Core";版本="1.1.0"/>< PackageReference Include ="Microsoft.AspNetCore.SignalR.Protocols.Json";版本="1.1.0"/>< PackageReference Include ="Microsoft.AspNetCore.SignalR";版本="1.1.0"/>< PackageReference Include ="Microsoft.AspNetCore.SpaServices.Extensions";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.SpaServices";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.StaticFiles";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.WebSockets";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore.WebUtilities";版本="2.2.0"/>< PackageReference Include ="Microsoft.AspNetCore";版本="2.2.0"/>< PackageReference Include ="Microsoft.CodeAnalysis.Razor";版本="2.2.0"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Analyzers"版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Design";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.InMemory";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Relational";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.SqlServer";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore.Tools";版本="3.1.4"/>< PackageReference Include ="Microsoft.EntityFrameworkCore";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Caching.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Caching.Memory"版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Caching.SqlServer";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.Binder";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.CommandLine";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.EnvironmentVariables";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.FileExtensions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.Ini";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.Json";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.KeyPerFile";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.UserSecrets";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration.Xml";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Configuration";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.DependencyInjection.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.DependencyInjection";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.DiagnosticAdapter";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Diagnostics.HealthChecks"版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.FileProviders.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.FileProviders.Composite";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.FileProviders.Embedded";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.FileProviders.Physical";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.FileSystemGlobbing";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Hosting.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Hosting";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Http";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Identity.Core"版本="2.2.0"/>< PackageReference Include ="Microsoft.Extensions.Identity.Stores"版本="2.2.0"/>< PackageReference Include ="Microsoft.Extensions.Localization.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Localization";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Logging.Abstractions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Logging.Configuration";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Logging.Console";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Logging.Debug";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Logging.EventSource";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Logging.TraceSource";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Logging";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.ObjectPool";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Options.ConfigurationExtensions";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Options.DataAnnotations";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Options"版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.Primitives";版本="3.1.4"/>< PackageReference Include ="Microsoft.Extensions.WebEncoders"版本="3.1.4"/>< PackageReference Include ="Microsoft.Net.Http.Headers";版本="2.2.0"/>< PackageReference Include ="System.IO.Pipelines"版本="4.5.2"/></ItemGroup></Project> 


更新:

对于在解决参考问题之后现在出现的问题,这些是与从EF Core 2.2升级有关的问题.到3.1.4.

(从技术上讲,这是一个完全不同的问题,答案也完全不同,并且与您的原始问题无关.因此,我建议下次再次针对SO提出一个全新的问题.)

有很多重要的 公共静态类DatabaseFacadeExtensions{公共静态RelationalDataReader ExecuteSqlQuery(这个DatabaseFacade databaseFacade,字符串sql,params object []参数){var concurrencyDetector = databaseFacade.GetService< IConcurrencyDetector>();使用(concurrencyDetector.EnterCriticalSection()){var rawSqlCommand = databaseFacade.GetService< IRawSqlCommandBuilder>().Build(sql,参数);var connection = databaseFacade.GetService< IRelationalConnection>();var parameterObj = new RelationalCommandParameterObject(联系,rawSqlCommand.ParameterValues,空值,空值,空值);返回rawSqlCommand.RelationalCommand.ExecuteReader(parameterObj);}}}

CS0619'RelationalQueryableExtensions.FromSql(IQueryable,RawSqlString,params object [])'已过时:'要使用纯字符串从SQL查询返回对象,请改用FromSqlRaw.要使用插值字符串语法从SQL查询返回对象以创建参数,请改用FromSqlInterpolated.直接在查询根目录的DbSet上调用任一新方法

对于上述警告,它已经告诉您要做什么(改为使用 FromSqlRaw FromSqlInterpolated ).这也是3.0中的EF Core更改.有关更多信息,请参见原始SQL查询.>

这是一个完全正常工作的控制台示例,演示了两种功能(您的 ExecuteSqlQuery()扩展方法和 FromSqlInterpolated()):

 使用System.Collections.Generic;使用System.Diagnostics;使用System.Linq;使用Microsoft.EntityFrameworkCore;使用Microsoft.EntityFrameworkCore.Infrastructure;使用Microsoft.EntityFrameworkCore.Storage;使用Microsoft.Extensions.Logging;命名空间IssueConsoleTemplate{公共课程IceCream{public int IceCreamId {get;放;}公共字符串名称{get;放;}}公共静态类DatabaseFacadeExtensions{公共静态RelationalDataReader ExecuteSqlQuery(这个DatabaseFacade databaseFacade,字符串sql,params object []参数){var concurrencyDetector = databaseFacade.GetService< IConcurrencyDetector>();使用(concurrencyDetector.EnterCriticalSection()){var rawSqlCommand = databaseFacade.GetService< IRawSqlCommandBuilder>().Build(sql,参数);var connection = databaseFacade.GetService< IRelationalConnection>();var parameterObj = new RelationalCommandParameterObject(联系,rawSqlCommand.ParameterValues,空值,空值,空值);返回rawSqlCommand.RelationalCommand.ExecuteReader(parameterObj);}}}公共类Context:DbContext{公共DbSet< IceCream>IceCreams {获取;放;}受保护的重写void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseSqlServer(@数据源=.\ MSSQL14;集成安全性= SSPI;初始目录= So63009531").UseLoggerFactory(LoggerFactory.Create(b =>b.AddConsole().AddFilter(级别=>级别> = LogLevel.Information))).EnableSensitiveDataLogging().EnableDetailedErrors();}受保护的重写void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity< IceCream>().HasData(新的IceCream {IceCreamId = 1,名称=香草"},新的IceCream {IceCreamId = 2,Name ="Chocolate"});}}内部静态类程序{私有静态void Main(){使用var context = new Context();context.Database.EnsureDeleted();context.Database.EnsureCreated();var iceCreams = context.IceCreams.OrderBy(u => u.IceCreamId).ToList();var vanillaName ="Vanilla";var vanillaIceCreamCountReader = context.Database.ExecuteSqlQuery(@"将count(*)选择为[IceCreamCount]来自[dbo].[IceCreams]其中Name = @ p0;,vanillaName);vanillaIceCreamCountReader.Read();var vanillaIceCreamCount =(int)vanillaIceCreamCountReader.DbDataReader ["IceCreamCount"];vanillaIceCreamCountReader.Dispose();var ChocolateName ="Chocolate";var ChocolateIceCreams = context.IceCreams.FromSqlInterpolated($从[dbo]中选择*.[IceCreams],其中[名称] = {chocolateName}").ToList();Debug.Assert(iceCreams.Count == 2);Debug.Assert(vanillaIceCreamCount == 1);Debug.Assert(chocolateIceCreams.Count == 1);}}} 

请注意,由于EF Core 3.0中的重要查询管道更改,您的查询可能会与以前有所不同(关键字为 解决方案

The underlying issue is, that the Microsoft.AspNetCore.App meta package is referencing a specific version range for the EF Core (and other) packages.

[...] Install/reference Microsoft.EntityFrameworkCore 3.1.4 directly to project MyApi to resolve this issue.

A simple solution is to do, what the message tells you to: Explicitly add the package versions, that you want to override, to the target project.

Assuming a simple original project file the the following:

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
        <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    </PropertyGroup>
    
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    </ItemGroup>

</Project>

Then the following will make your project compile:

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
        <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    </PropertyGroup>
    
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    </ItemGroup>

    <!-- Manually override all conflicting packages we care about and their
         dependencies, that are referenced by `Microsoft.AspNetCore.App`. -->
    <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.4"/>

        <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.Options" Version="3.1.4" />
        <PackageReference Include="Microsoft.Extensions.Primitives" Version="3.1.4" />
    </ItemGroup>
    
</Project>

However, this will lead to a couple of warnings. If you don't want these, you have to reference the individual packages, that the Microsoft.AspNetCore.App meta package conveniently combines for you, and update their versions appropriately:

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
        <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    </PropertyGroup>

    <ItemGroup>
        <!-- Don't use the meta package anymore. We will explicitly reference
             all actual packages instead.-->
        <!--<PackageReference Include="Microsoft.AspNetCore.App" />-->
        <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    </ItemGroup>

    <!-- Manually include all packages from "Microsoft.AspNetCore.App",
         and update all package versions unrelated to ASP.NET Core. -->
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.6"/>
        <PackageReference Include="Microsoft.AspNetCore.Antiforgery" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.Core" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.Facebook" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.OAuth" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.Twitter" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.WsFederation" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authorization.Policy" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authorization" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.DataProtection.Extensions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Diagnostics.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Diagnostics.HealthChecks" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.HostFiltering" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Hosting.Server.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Html.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="1.1.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Http.Connections" Version="1.1.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.HttpOverrides" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.HttpsPolicy" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Localization.Routing" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Localization" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.MiddlewareAnalysis" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Analyzers" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.ApiExplorer" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Cors" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.DataAnnotations" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Xml" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Localization" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.RazorPages" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.NodeServices" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Owin" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Razor.Runtime" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Razor" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.ResponseCaching.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.ResponseCaching" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Rewrite" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Routing.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Routing" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Server.HttpSys" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Server.IIS" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Core" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Https" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Session" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="1.1.0"/>
        <PackageReference Include="Microsoft.AspNetCore.SignalR.Core" Version="1.1.0"/>
        <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="1.1.0"/>
        <PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0"/>
        <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0"/>
        <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0"/>
        <PackageReference Include="Microsoft.CodeAnalysis.Razor" Version="2.2.0"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.4"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.DiagnosticAdapter" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.FileProviders.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.FileProviders.Composite" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Http" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="2.2.0"/>
        <PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="2.2.0"/>
        <PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Localization" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Logging.EventSource" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Logging.TraceSource" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.ObjectPool" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Options" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.Primitives" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Extensions.WebEncoders" Version="3.1.4"/>
        <PackageReference Include="Microsoft.Net.Http.Headers" Version="2.2.0"/>
        <PackageReference Include="System.IO.Pipelines" Version="4.5.2"/>
    </ItemGroup>
    
</Project>


Update:

For the issues that now occur after the reference issues have been resolved, these are now issues related to your upgrade from EF Core 2.2. to 3.1.4.

(Technically this is now a completely different question with a completely different answer and unrelated to your original question. I would therefore recommend to ask an entirely new question on SO for this next time.)

There were many significant breaking changes in EF Core 3.0, because the query pipeline was completely rewritten.

One of those changes is, that EF Core does not rely on Remotion anymore.

As for your ExecuteSqlQuery() extension method, the following implementation should work:

public static class DatabaseFacadeExtensions
{
    public static RelationalDataReader ExecuteSqlQuery(
        this DatabaseFacade databaseFacade,
        string sql,
        params object[] parameters)
    {
        var concurrencyDetector = databaseFacade.GetService<IConcurrencyDetector>();
        using (concurrencyDetector.EnterCriticalSection())
        {
            var rawSqlCommand = databaseFacade
                .GetService<IRawSqlCommandBuilder>()
                .Build(sql, parameters);

            var connection = databaseFacade.GetService<IRelationalConnection>();
            var parameterObj = new RelationalCommandParameterObject(
                connection,
                rawSqlCommand.ParameterValues,
                null,
                null,
                null);
            return rawSqlCommand.RelationalCommand.ExecuteReader(parameterObj);
        }
    }
}

CS0619 'RelationalQueryableExtensions.FromSql(IQueryable, RawSqlString, params object[])' is obsolete: 'For returning objects from SQL queries using plain strings, use FromSqlRaw instead. For returning objects from SQL queries using interpolated string syntax to create parameters, use FromSqlInterpolated instead. Call either new method directly on the DbSet at the root of the query

For the warning above, it already tells you what to do (use either FromSqlRaw or FromSqlInterpolated instead). It is also an EF Core change in 3.0. See Raw SQL Queries for further information.

Here is a fully working console sample, that demonstrates both functionalities (your ExecuteSqlQuery() extension method and FromSqlInterpolated()):

using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Logging;

namespace IssueConsoleTemplate
{
    public class IceCream
    {
        public int IceCreamId { get; set; }
        public string Name { get; set; }
    }

    public static class DatabaseFacadeExtensions
    {
        public static RelationalDataReader ExecuteSqlQuery(
            this DatabaseFacade databaseFacade,
            string sql,
            params object[] parameters)
        {
            var concurrencyDetector = databaseFacade.GetService<IConcurrencyDetector>();
            using (concurrencyDetector.EnterCriticalSection())
            {
                var rawSqlCommand = databaseFacade
                    .GetService<IRawSqlCommandBuilder>()
                    .Build(sql, parameters);

                var connection = databaseFacade.GetService<IRelationalConnection>();
                var parameterObj = new RelationalCommandParameterObject(
                    connection,
                    rawSqlCommand.ParameterValues,
                    null,
                    null,
                    null);
                return rawSqlCommand.RelationalCommand.ExecuteReader(parameterObj);
            }
        }
    }

    public class Context : DbContext
    {
        public DbSet<IceCream> IceCreams { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder
                .UseSqlServer(@"Data Source=.\MSSQL14;Integrated Security=SSPI;Initial Catalog=So63009531")
                .UseLoggerFactory(
                    LoggerFactory.Create(
                        b => b
                            .AddConsole()
                            .AddFilter(level => level >= LogLevel.Information)))
                .EnableSensitiveDataLogging()
                .EnableDetailedErrors();
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<IceCream>()
                .HasData(
                    new IceCream {IceCreamId = 1, Name = "Vanilla"},
                    new IceCream {IceCreamId = 2, Name = "Chocolate"});
        }
    }

    internal static class Program
    {
        private static void Main()
        {
            using var context = new Context();

            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();

            var iceCreams = context.IceCreams
                .OrderBy(u => u.IceCreamId)
                .ToList();

            var vanillaName = "Vanilla";
            var vanillaIceCreamCountReader = context.Database.ExecuteSqlQuery(
@"select count(*) as [IceCreamCount]
from [dbo].[IceCreams]
where Name = @p0;",
                vanillaName);
            vanillaIceCreamCountReader.Read();
            var vanillaIceCreamCount = (int)vanillaIceCreamCountReader.DbDataReader["IceCreamCount"];
            vanillaIceCreamCountReader.Dispose();

            var chocolateName = "Chocolate";
            var chocolateIceCreams = context.IceCreams
                .FromSqlInterpolated($"select * from [dbo].[IceCreams] where [Name] = {chocolateName}")
                .ToList();

            Debug.Assert(iceCreams.Count == 2);
            Debug.Assert(vanillaIceCreamCount == 1);
            Debug.Assert(chocolateIceCreams.Count == 1);
        }
    }
}

Please be aware, that because of the significant query pipeline changes in EF Core 3.0, your queries might perform different than before (the keyword is cartesian explosion).

这篇关于NU1107:为Microsoft.EntityFrameworkCore.Abstractions检测到版本冲突.安装EFCore与AspNetCore 2.2一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆