Entity framework core NU1107:检测到Microsoft.EntityFrameworkCore.Abstractions的版本冲突。安装用于AspNetCore 2.2的EFCore

Entity framework core NU1107:检测到Microsoft.EntityFrameworkCore.Abstractions的版本冲突。安装用于AspNetCore 2.2的EFCore,entity-framework-core,Entity Framework Core,我能够升级我的.NetStandard2.0项目以使用EntityFrameworkCore 3.1.4,并创建了一个nuget包 现在我想在我的netcoreapp2.2项目中使用这个nuget包 然而,当我试图通过nuget添加包时,我得到了 Error NU1107 Version conflict detected for Microsoft.EntityFrameworkCore. Install/reference Microsoft.EntityFrameworkCore 3

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

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

然而,当我试图通过nuget添加包时,我得到了

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 1
我得到

我只是简单地评论了一下

然后我就到了

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

根本问题是,
Microsoft.AspNetCore.App
元包引用了EF核心(和其他)包的特定版本范围

[…]直接将Microsoft.EntityFrameworkCore 3.1.4安装/引用到project MyApi以解决此问题

一个简单的解决方案是,按照消息的要求:显式地将要覆盖的包版本添加到目标项目中

假设是一个简单的原始项目文件,请执行以下操作:


netcoreapp2.2
在EF Core 3.0中,因为查询管道被完全重写

其中一个变化是,EF Core不再依赖于
Remotion

对于
ExecuteSqlQuery()
扩展方法,以下实现应该可以工作:

公共静态类数据库FacadeExtensions
{
公共静态RelationalDataReader ExecuteSqlQuery(
此DatabaseFacade DatabaseFacade,
字符串sql,
参数对象[]参数)
{
var concurrencyDetector=databaseFacade.GetService();
使用(concurrencyDetector.EnterCriticalSection())
{
var rawSqlCommand=databaseFacade
.GetService()
.Build(sql、参数);
var connection=databaseFacade.GetService();
var parameterObj=新的RelationalCommandParameterObject(
联系,,
rawSqlCommand.ParameterValues,
无效的
无效的
无效);
返回rawSqlCommand.RelationalCommand.ExecuteReader(参数obj);
}
}
}
CS0619“RelationalQueryableExtensions.FromSql(IQueryable,RawSqlString,params object[])已过时:”“对于使用普通字符串从SQL查询返回对象,请改用FromSqlRaw。要使用插值字符串语法从SQL查询返回对象以创建参数,请改用FromSqlInterpolated。直接在查询根的DbSet上调用任何一个新方法

对于上面的警告,它已经告诉您要做什么(改用
FromSqlRaw
FromSqlInterpolated
)。这也是EF在3.0中的核心变化。有关更多信息,请参阅

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

使用System.Collections.Generic;
使用系统诊断;
使用System.Linq;
使用Microsoft.EntityFrameworkCore;
使用Microsoft.EntityFrameworkCore.Infrastructure;
使用Microsoft.EntityFrameworkCore.Storage;
使用Microsoft.Extensions.Logging;
命名空间IssueConsoleTemplate
{
公共级冰淇淋
{
public int IceCreamId{get;set;}
公共字符串名称{get;set;}
}
公共静态类数据库FacadeExtensions
{
公共静态RelationalDataReader ExecuteSqlQuery(
此DatabaseFacade DatabaseFacade,
字符串sql,
参数对象[]参数)
{
var concurrencyDetector=databaseFacade.GetService();
使用(concurrencyDetector.EnterCriticalSection())
{
var rawSqlCommand=databaseFacade
.GetService()
.Build(sql、参数);
var connection=databaseFacade.GetService();
var parameterObj=新的RelationalCommandParameterObject(
联系,,
rawSqlCommand.ParameterValues,
无效的
无效的
无效);
返回rawSqlCommand.RelationalCommand.ExecuteReader(参数obj);
}
}
}
公共类上下文:DbContext
{
公共DbSet冰淇淋{get;set;}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
选项生成器
.UseSqlServer(@“数据源=。\MSSQLS14;集成安全性=SSPI;初始目录=SO6309531”)
.UseLoggerFactory(
LoggerFactory,创建(
b=>b
.AddConsole()
.AddFilter(level=>level>=LogLevel.Information)))
.EnableSensitiveDataLogging()
.EnableDetailedErrors();
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasData(
新冰淇淋{IceCreamId=1,Name=“香草”},
新冰淇淋{IceCreamId=2,Name=“Chocolate”});
}
}
内部静态类程序
{
私有静态void Main()
{
使用var context=newcontext();
context.Database.EnsureDeleted();
context.Database.recreated();
var iceCreams=context.iceCreams
.OrderBy(u=>u.IceCreamId)
.ToList();
var vanillaName=“香草”;
瓦尼尔
Install-Package Microsoft.EntityFrameworkCore -Version 3.1.4
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.InstallPackageCommand
 
using Remotion.Linq.Clauses;
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