好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

c# – 我们可以将所有SQL脚本转换为Linq-to-SQL表达式还是有任何限制?

我想将我的所有db存储过程转换为 linq到sql表达式,这项工作是否有任何限制?你必须注意到我的数据库中有一些复杂的查询. Linq to SQL不支持SQL Server的几个功能:

>批量更新(除非您使用非标准扩展);

>表值参数;

> CLR类型,包括空间类型和hierarchyid;

> DML语句(我特别考虑表变量和临时表);

> OUTPUT INTO条款;

> MERGE声明;

>递归公用表表达式,即嵌套集上的分层查询;

>使用SET ROWCOUNT优化分页查询(ROW_NUMBER不是最有效的);

>某些窗口函数,如DENSE_RANK和NTILE;

>游标 – 虽然显然应该避免这些游标,但有时你真的需要它们;

>使用ROLLUP,CUBE,COMPUTE等的分析查询

>统计汇总,如STDEV,VAR等.

> PIVOT和UNPIVOT查询;

> XML列和集成的XPath;

> …依此类推……

有了这些东西,你可以在技术上编写自己的扩展方法,解析表达式树并实际生成正确的SQL,但这不适用于上述所有,即使它是一个可行的选项,它通常只是更容易编写SQL并调用命令或存储过程.有一个原因,DataContext为您提供ExecuteCommand,ExecuteQuery和ExecuteMethodCall方法.

正如我在过去所说的那样,像Linq to SQL这样的ORM是很好的工具,但它们不是银子弹.我发现对于规模较大,数据库较多的项目,L2S通常可以处理大约95%的任务,但对于其他5%,你需要编写UDF或存储过程,有时甚至完全绕过DataContext(对象跟踪会不适合服务器触发器).

对于较小/较简单的项目,很有可能您可以在Linq to SQL中执行所有操作.你是否应该完全是一个不同的问题,而且我不打算在这里回答.

查看更多关于c# – 我们可以将所有SQL脚本转换为Linq-to-SQL表达式还是有任何限制?的详细内容...

  阅读:55次