linq-to-sql – 将Linq迁移到SQL代码到.Net Core

前端之家收集整理的这篇文章主要介绍了linq-to-sql – 将Linq迁移到SQL代码到.Net Core前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一些使用 Linq to sql作为ORM的遗留代码.我们想将这个逻辑迁移到.Net Core,以便我们可以将它放在 Linux服务器上.据我所知,L2S不包含在.Net Core中.

阻力最小的迁移路径是什么?

解决方法

如果您使用L2S,因为EF使用Skip和Take以获取大块结果作为块效率很低,那么最好的选择是 Dapper.获取 LINQPad的副本并使用它来获取每个LINQ表达式生成sql.

L2S围绕实际查询包含一些奇怪的sql,以使用sql的rownumber函数来实现skip和take.如果您使用的是最新版本的sql Server,那么您不需要这样,因为Tsql现在具有相当于skip和take的子句.如果您直接编写sql生成可理解的sql,这将不会在后面的人中引发WTF,但LINQ方式适用于所有版本的sql Server,这很方便.

然后将此sql与Dapper一起使用,Dapper将为您执行ORM部分.它还对类似于L2S的类型映射参数提供了适当的支持,因此您可以避免构建sql字符串和注入漏洞.

如果你想要所有的智能来构建具有由集合成员资格隐含的FK值的对象图,那么你运气不好,你将不得不手动编码.

更新2018-05-11

EF不像以前那么可怕. EF Core比EF更简单,同时保留了许多优点.我目前在工作项目中使用EF Core,这不是曾经的EF灾难.

我确实需要帮助外连接.留给自己的设备,LINQ获取内部部分,然后为每个内部行对其外部部分运行单独的查询.

我通过显式获取内部部分并将键集构造为int数组来解决此问题.另一个LINQ语句获取了所有外部行,利用了Array.Contains映射到使用索引的IN这一事实.然后我使用ToArray()实现了两个部分,并使用LINQ将它们连接到内存中.这使执行时间从10分钟缩短到300毫秒.

你不应该这样做; L2S首先不会翘起来.但至少有一个简单的通用解决方案.

我的解决方案的一个缺点是它不能很好地适应渐进式提取.

猜你在找的.NET Core相关文章