Linq to sql 亲爱的DBA-我想使用LinqToSQL而不是存储过程,因为

Linq to sql 亲爱的DBA-我想使用LinqToSQL而不是存储过程,因为,linq-to-sql,stored-procedures,Linq To Sql,Stored Procedures,在我的组织中,我们必须对一个单独的DBA小组做出决定,比如使用LinqToSQL。您认为使用L2S而不是存储过程的一些最佳理由是什么。您可能会将数据库中以前的功能移动到应用程序中,这可能是一件好事,也可能是坏事。我认为LinqToSQL的一个有力论据是,如果您必须向DBA组提交存储过程请求,等待它们完成,然后与它们一起测试并解决任何问题,那么它可以允许您使用Linq获得更快的周转时间。您至少可以将Linq用于基本数据访问,然后在需要时使用存储过程(它们有助于缓解性能瓶颈)。使用L2S时,appl

在我的组织中,我们必须对一个单独的DBA小组做出决定,比如使用LinqToSQL。您认为使用L2S而不是存储过程的一些最佳理由是什么。

您可能会将数据库中以前的功能移动到应用程序中,这可能是一件好事,也可能是坏事。我认为LinqToSQL的一个有力论据是,如果您必须向DBA组提交存储过程请求,等待它们完成,然后与它们一起测试并解决任何问题,那么它可以允许您使用Linq获得更快的周转时间。您至少可以将Linq用于基本数据访问,然后在需要时使用存储过程(它们有助于缓解性能瓶颈)。

使用L2S时,application developer将提供更多控制。所以,我想说,您可以快速修复某些问题,而不需要与DBA组进行额外的通信


除了非常以数据为中心的报告之外,我现在很少使用存储过程。

请阅读:。

堆栈溢出问题对双方都有好处

使用存储过程,您可以对查询进行更严格的控制,当性能很重要时,这是一个优势。您还可以对过程进行更改,而无需重新编译和重新部署,这非常方便


但是,使用LINQ可以获得类型安全性,DAL更容易在项目中保持版本控制和维护,更容易测试和更好的调试支持。

我认为这可以归结为代码集成。您不必查看存储过程,只需查看应用程序中的代码即可

看看这个链接。。。


我还发现,构建类似于LINQ的动态sql查询的功能不会显得如此动态,而且很容易调试。例如,假设您有一个包含10个不同条件/过滤器的搜索页面。如果用户仅筛选其中的2个,则可以创建扩展方法,以便在某些条件为true时在查询中添加where筛选器。如果你有一个存储过程,你会有一堆乱七八糟的东西要调试…

它也会阻止SQL注入

存储过程也是如此,但是如果您使用的是linq2sql,DBA会对此感到担忧,因此让他们知道这将有助于说服您使用L2S


L2S还将允许DBA专注于数据库及其表结构、索引等的优化,而不必担心支持数据库中的任何存储过程,因为这一责任将转移到开发团队身上。

检查一下,这里已经讨论过:



此外,我们喜欢使用linq读取数据,并使用存储过程更新数据,因为存储过程中存在一些业务逻辑(不幸的是)。我不同意存储过程中的商业逻辑,但最基本的除外。双方都可能有争论,这些争论与您的环境相关。

过程和Linq2sql都可以防止这种情况发生。任何参数化查询都会阻止这种情况的发生。@bbqchickenrobot:你是对的,但是DBA不能利用存储过程阻止SQL注入这一事实来提升存储过程>linq2sql(我想这是我真正想说的)同意类型安全问题,这对我来说是最大的好处。我想说LINQtoSQL显然不容易测试。考虑到它为您提供了更多的查询构造途径,您需要测试的点比存储过程的简单参数列表多得多。每种方法都有许多优点和缺点,但要决定应用程序体系结构,这样您就不必查看存储过程,这简直是疯了@KM-我从来没有建议过使用LINQ来避免编写存储过程。我是单一责任模式的粉丝,因此,我与数据库的连接以及获取数据的方式往往是某种形式的独立结构。。。我同意每种方法都有利弊,你需要根据具体情况决定你的DAO结构。@RSolberg说“我认为这可以归结为代码集成。你不必看存储过程,只需看应用程序中的代码就可以了。”我读到“而不是必须看存储过程”与“因此您不必看存储过程”相同“。这篇文章完全有缺陷。这似乎意味着LINQtoSQL是SQL的替代品,而事实并非如此。LINQtoSQL只生成SQL查询并自己进行映射。与硬编码查询或存储过程相比,LINQ几乎没有更快的速度,它(最好)也不会更慢或更不可靠。唯一的优势在于查看代码,而不是查询性能或灵活性。C+VS与C++的比较是虚假的;如果适用的话,C语言会被编译成C++,这是愚蠢的。如果你的LINQ代码中使用的DB表被改变,那么你是类,那么它不符合单一责任模式的要求。