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首先不会翘起来.但至少有一个简单的通用解决方案. 我的解决方案的一个缺点是它不能很好地适应渐进式提取. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |