为什么人们使用linq到sql?
在这样的前提下:为什么人们使用linq到sql?,linq,linq-to-sql,Linq,Linq To Sql,在这样的前提下: 有能干的sql程序员 (相关性-编写sql查询不是问题) 有能力的应用程序开发人员 (correlary-有简单/强大/灵活的体系结构来处理连接和来自代码的简单查询) 为什么人们使用linq到sql 每个事务都会增加开销 对于中等复杂的计算,性能损失的可能性很大(DBs用于处理集和计算,并由工程师团队进行优化——为什么要搞砸这件事?) 失去了灵活性(如果您想添加另一个ui(非.NET应用程序)或访问方法,则必须将查询放回数据库或创建单独的数据访问层) 没有集中控制db上的
- 有能干的sql程序员 (相关性-编写sql查询不是问题)
- 有能力的应用程序开发人员 (correlary-有简单/强大/灵活的体系结构来处理连接和来自代码的简单查询)
- 每个事务都会增加开销
- 对于中等复杂的计算,性能损失的可能性很大(DBs用于处理集和计算,并由工程师团队进行优化——为什么要搞砸这件事?)
- 失去了灵活性(如果您想添加另一个ui(非.NET应用程序)或访问方法,则必须将查询放回数据库或创建单独的数据访问层)
- 没有集中控制db上的写入/更新/读取操作会导致安全性损失(例如,记录已更改-如果允许应用程序使用linq to sql进行更新,则无法证明是哪个应用程序更改了它或应用程序的哪个实例更改了它)
下面是一个逐点回答: 每个事务都会增加开销 大体上是正确的。对于许多(但不是所有!)场景,可以在需要运行查询之前使用
CompiledQuery
,通过翻译查询来避免这种情况
对于中等复杂的计算,性能损失的可能性很大(DBs用于处理集和计算,并由工程师团队进行优化——为什么要搞砸这件事?)
要么编写linq,将其转换为sql,然后从优化器生成计划,要么编写sql,优化器从中生成计划。在这两种情况下,你都在告诉机器你想要什么,而机器应该知道怎么做。您是否建议使用查询提示来颠覆优化器是一种好的做法?许多有能力的sql程序员不同意这一建议
失去了灵活性(如果您想添加另一个ui(非.NET应用程序)或访问方法,则必须将查询放回数据库或创建单独的数据访问层)
很多使用linq的人已经是SOA了。linq住在一个服务区。非.NET应用程序调用该服务。巴达宾,巴达邦
没有集中控制db上的写入/更新/读取操作会导致安全性损失(例如,记录已更改-如果允许应用程序使用linq to sql进行更新,则无法证明是哪个应用程序更改了它或应用程序的哪个实例更改了它)
这根本不是事实。证明哪个应用程序已连接并发出sql命令的方式与证明哪个应用程序已连接并调用存储过程的方式相同。让我列出几点:
我还相信,您的问题可以更普遍地涉及所有的ORM,而不仅仅是LINQ to SQL,而且我所说的大部分都是正确的。对我来说,编写LINQ to SQL代码比编写一堆存储过程花费的时间要少得多。当设计尚未完成时尤其如此,在这种情况下,我还不知道我要在C#对象上做多少工作,以及我要在SQL中做多少工作 所以,我可以跳过构建数据集,我不必单击添加查询,基本上,linq to sql意味着我可以在更短的时间内更改代码
另外,作为Haskell的忠实粉丝,我可以用linq-to-sql编写大量函数式代码,而且非常有效。与将sql语句编写为字符串相比,调试器可以在查询中发现sytax错误,这是一些方便的功能。直到运行时才会发现的错误
另外,我发现LINQ语句比SQL更容易阅读 问题是,在某个地方,很少有一个有能力的SQL开发人员喜欢编写SQL,而不愿意做其他事情。我认为自己胜任SQL,我用存储的PROS或参数化的查询来做所有的数据访问层。问题是它需要时间,而且很枯燥。我宁愿编写优秀的应用程序,也不愿在数据访问层上瞎折腾,这些层本质上是为每个数据重复几十次select、insert、update和delete SQL语句(或proc)