LINQ查询与存储过程

ste*_*776 14 .net linq sql-server entity-framework linq-to-sql

使用linq查询(以及像EF或linq2sql这样的ORM)VS的优点和缺点是什么.存储过程(SQL server 2008)来查询和更新数据模型?性能?速度?等等...

Jac*_*tti 11

当你在代码中时,Linq肯定更具可读性.看到调用执行一个名为"sp_GetSomething"的sproc并没有告诉你任何开发人员,除非你去看看sproc的功能.看到类似的代码

var query = from c in db.TableName
            where c.Name == "foo"
            select c;
Run Code Online (Sandbox Code Playgroud)

这可以准确地告诉您正在提取哪些数据.

另一方面,如果您决定更改代码,则存储过程不需要您重新编译应用程序.如果您决定突然更改" where"条款或更改Order By- 更改sproc很容易.更改Linq代码可能会更耗时.

我确信还有更多,但这些是我注意到的两个.

  • 第二部分可能被认为是一个缺点.在生产环境中更改sproc是静默的,可能是致命的,而对代码的更改则通过版本控制,构建和测试来确保质量. (4认同)
  • 它应该是==而不是=你的样本 (3认同)

gbn*_*gbn 9

有2个阵营:用于存储过程和存储过程.

我发现缺乏经验会让人们走上某种方式.我们开发的商店种类繁多.

在实践中

  • 如果您是公司程序员,那么您永远不会更改您的RDBMS平台.您现在重构您的客户端,并且您将重新实现您的DAL /存储库.为什么?使用存储过程.
  • 如果您为供应商工作,那么您可能需要支持多个RDBMS.ORM主要抽象出来.

我在公司商店所以......

  • 优点:使用Linq,您不必了解SQL
  • 缺点:当出现问题时你会被搞砸

我们(作为开发人员DBA团队)经常不得不拯救姐妹团队中的ORM用户.

还有一些更微妙的问题,例如:

  • 任何客户端都可以使用存储过程
  • 将比你的重构更长的EF或其他.net 5带来的
  • 存储过程提供的封装来抽象模式
  • 减少往返次数,因为不应该将存储过程视为方法或原子调用?

  • 关于你的"必须拯救开发者"我有一些 - 我会说团队需要聘请更好的开发人员 (2认同)