我一直在将我的项目从.net core 2.2迁移到3.1 LTS,并更新所有nuget包。在所有这些过程中,我看到我的许多Rest API端点由于EF和DB的一些问题而停止正常工作。
与本文相关的是,目前EF Core 3.0中包含的突破性更改,我们必须立即修复(我们不能保持原样(,才能成功迁移到.net Core 3.1和EF 3.0。
问题是,如何安全地迁移到EF Core 3.0,以及如何找到所有需要修复LINQ查询的地方?
查询管道为EF Core 3.0完全重写,因此在技术上有许多突破性的更改。
然而,在实践中,它归结为一些应该检查的内容。这些标记有high
影响。您可以忽略关于EF Core 3.0和的。NET标准2.1,因为EF Core 3.1再次与兼容。NET标准2.0。
在大多数情况下,它只能归结为一个具有实际影响的突破性变化:
不再在客户端上评估LINQ查询
这是重要的一个。使用AsEnumerable()
或ToList()
可以从查询中的该点显式切换到客户端评估,或者手动拆分查询,其中使用了大量可能导致笛卡尔爆炸的Include()
调用。
您也可以等待EF Core 5(或现在使用最新的预览版(,它添加了拆分查询的功能,这是EF Core 3.0之前功能的改进版本,可以明确地为查询启用。