我是否需要Linq2SQL的存储过程?

时间:2009-03-01 01:51:37

标签: sql-server-2005 linq-to-sql stored-procedures .net-3.5

我刚开始使用Linq to SQL,我刚刚想到我不需要数据库中的任何sprocs,因为我可以通过Linq to SQL进行所有数据访问。

有没有理由用Linq to SQL编写sprocs?

谢谢。

5 个答案:

答案 0 :(得分:4)

存储过程非常重要。 LinkToSQL要求直接访问表中的插入,更新,删除和选择数据。这意味着,如果您的站点或应用程序未正确检查用户输入,则您的数据库将受到数据库注入攻击。

使用存储过程时,这不是问题,因为登录数据库的用户没有直接表访问权限。对存储过程授予访问权限,该访问权限允许UI访问表,但仅限于存储过程的上下文中。

答案 1 :(得分:1)

更不用说,IMO,但仍然存在使用存储过程或表值函数有用的情况。当然,LinqToSQL并不排除使用存储过程,因此如果需要,您仍然可以使用它们。例如,我使用表值函数对表连接进行参数化查询以支持多变量过滤器。这可以大大简化您的代码,并使您能够优化查询。

答案 2 :(得分:1)

通常没有充分理由在新应用程序中编写存储过程。

原因是在您的应用程序中执行数据访问有无数更好的技术。有许多对象关系映射技术可用于许多语言和平台。

存储过程的一个参数是它们在数据库前面提供了一个抽象API。问题在于,SQL是一种非常糟糕的语言,用于编写高级业务程序。另一个问题是,您将使用SQL以外的语言在数据库前面使用API​​。像C#,Ruby和Haskell这样的语言提供了在数据库前创建API的更强大的方法,这些方法在这些语言中使用时更加自然。

答案 3 :(得分:0)

可能与现有数据库连接,该数据库要求所有数据检索都通过一组受控存储过程完成。

或许在Linq2SQL中有一个很难(不可能?)的构造。

Retrieving Data Using Stored Procedures

答案 4 :(得分:0)

我担心你刚刚走过一条宗教的矿井!

存储过程与否是一个非常激烈争论的主题,并且(在我看来)经常归结为一方面的DB / SQL专家与另一方面的'vanilla'开发人员之间的斗争。每一方都试图尽可能多地获得羽绒被。

查看此链接,Stored procedures are bad, m'kay?以及随后的LOOOOONG辩论。