Hom*_*sey 17 linq-to-sql .net-core asp.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一起使用,它将为您执行ORM部分.它还对类似于L2S的类型映射参数提供了适当的支持,因此您可以避免构建SQL字符串和注入漏洞.
如果你想要所有的智能来构建具有由集合成员资格隐含的FK值的对象图,那么你运气不好,你将不得不手动编码.
EF不像以前那么可怕.EF Core比EF更简单,同时保留了许多优点.我目前在工作项目中使用EF Core,这不是曾经的EF灾难.
我确实需要帮助外连接.留给自己的设备,LINQ获取内部部分,然后为每个内部行对其外部部分运行单独的查询.
我通过显式获取内部部分并将键集构造为int数组来解决此问题.另一个LINQ语句获取所有外部行,利用Array.Contains映射到使用索引的IN 的事实.然后我ToArray()使用LINQ 将这两个部分实现,并将它们连接到内存中.这使执行时间从10分钟缩短到300毫秒.
你不应该这样做; L2S首先不会翘起来.但至少有一个直截了当的通用解决方案.
我的解决方案的一个缺点是它不能很好地适应渐进式提取.
| 归档时间: |
|
| 查看次数: |
9333 次 |
| 最近记录: |