Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 安全迁移到EF Core 3.0_C#_Entity Framework_.net Core_Entity Framework Core_Asp.net Core 3.1 - Fatal编程技术网

C# 安全迁移到EF Core 3.0

C# 安全迁移到EF Core 3.0,c#,entity-framework,.net-core,entity-framework-core,asp.net-core-3.1,C#,Entity Framework,.net Core,Entity Framework Core,Asp.net Core 3.1,我一直在将我的项目从.net core 2.2迁移到3.1 LTS,并更新所有nuget软件包,在完成所有这些过程后,我发现我的许多Rest API端点由于EF和DB的一些问题而停止正常工作 与本文相关的是,为了成功迁移到.net core 3.1和EF 3.0,我们现在有大量的突破性更改,必须立即修复这些更改(我们不能保持原样) 问题是,如何安全地迁移到EF Core 3.0,以及如何找到需要修复LINQ查询的所有位置?查询管道已为EF Core 3.0完全重写,因此在技术上有许多突破性的更改

我一直在将我的项目从.net core 2.2迁移到3.1 LTS,并更新所有nuget软件包,在完成所有这些过程后,我发现我的许多Rest API端点由于EF和DB的一些问题而停止正常工作

与本文相关的是,为了成功迁移到.net core 3.1和EF 3.0,我们现在有大量的突破性更改,必须立即修复这些更改(我们不能保持原样)


问题是,如何安全地迁移到EF Core 3.0,以及如何找到需要修复LINQ查询的所有位置?

查询管道已为EF Core 3.0完全重写,因此在技术上有许多突破性的更改

但在实践中,它归结为一些需要检查的问题。这些标记为
高影响。您可以忽略关于EF Core 3.0和.NET Standard 2.1的内容,因为EF Core 3.1再次与.NET Standard 2.0兼容

在大多数情况下,它只能归结为一个具有实际影响的突破性变化:

这是重要的一点。使用
AsEnumerable()
ToList()
从查询中的该点显式切换到客户机求值,或手动拆分查询,其中使用大量
Include()
调用,可能会导致错误


您也可以等待EF Core 5(或现在使用最新预览版),它添加了的功能,这是EF Core 3.0之前版本的改进版本,可以显式启用查询功能。

真正的变化是客户端评估默认关闭(谢天谢地!!!!)。它只是作为权宜之计存在的,因为EF Core 1.0甚至不能执行
分组操作。EF Core 2.2已经在每次使用客户端配置时发出警告,但很可能没有记录这些警告。您可以将EF Core 2.2 DbContext配置为抛出,如图所示,您可以添加
optionsBuilder.ConfigureWarnings(w=>w.throw(RelationalEventId.QueryClientEvaluationWarning))在您的上下文中,在迁移之前解决问题,然后迁移到EF Core 3.1测试、测试。。。。。当然,您可以将查询移动到更易于单独测试的方法中。当然,我需要对所有查询进行测试,但我想知道是否有选项可以使用静态分析器之类的工具向我显示需要更新LINQ查询的所有位置。