我能够升级.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提出一个全新的问题.)
有很多重要的在EF Core 3.0中发生重大更改,因为查询管道已完全重写.
其中一项更改是EF Core不再依赖 Remotion .
对于您的 ExecuteSqlQuery()扩展方法,以下实现应该起作用:
公共静态类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中的重要查询管道更改,您的查询可能会与以前有所不同(关键字为笛卡尔爆炸).
I was able to upgrade my .NetStandard2.0 project to use EntityFrameworkCore 3.1.4 and created a nuget package.
Now I want to use that nuget package in my netcoreapp2.2 project.
However, when I try to add the package via nuget I get
Error NU1107 Version conflict detected for Microsoft.EntityFrameworkCore. Install/reference Microsoft.EntityFrameworkCore 3.1.4 directly to project MyApi to resolve this issue. 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 1So I tried to install the Entity Framework Packages using
Install-Package Microsoft.EntityFrameworkCore -Version 3.1.4I got
NU1608: Detected package version outside of dependency constraint: Microsoft.AspNetCore.App 2.2.0 requires Microsoft.EntityFrameworkCore (>= 2.2.0 && < 2.3.0) but version Microsoft.EntityFrameworkCore 3.1.4 was resolved. Install-Package : NU1107: Version conflict detected for Microsoft.EntityFrameworkCore.Abstractions. Install/reference Microsoft.EntityFrameworkCore.Abstractions 3.1.4 directly to project MyApito resolve this issue. 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). At line:1 char:1 + Install-Package Microsoft.EntityFrameworkCore -Version 3.1.4 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Install-Package], Exception + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommandI aren't willing to start trying to install the suggested package because I have just lost half a day doing similar things in the Package Manager UI [Update] When I do start to install via Nuget I see a message
Detected package version outside of dependency constraint: Microsoft.EntityFrameworkCore.Abstractions (>=2.2.0 && < 2.3.0) but version Microsoft.EntityFrameworkCore.Abstractions 3.1.5 was resolved
If I roll back my library to using EntityFrameworkCore 2.2.0 and had to change all Microsoft.Data.SqlClient to System.Data.SqlClient references.
[Update] Following Lauxjpn's advice and pasting in the references I get
I started to try and resolve errors. The first error I got was on
using Remotion.Linq.Clauses;which I simply commented out.
Then I got as far as
CS0619 'RelationalQueryableExtensions.FromSql<TEntity>(IQueryable<TEntity>, 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解决方案
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.
发布评论