Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么人们使用linq到sql?_Linq_Linq To Sql - Fatal编程技术网

为什么人们使用linq到sql?

为什么人们使用linq到sql?,linq,linq-to-sql,Linq,Linq To Sql,在这样的前提下: 有能干的sql程序员 (相关性-编写sql查询不是问题) 有能力的应用程序开发人员 (correlary-有简单/强大/灵活的体系结构来处理连接和来自代码的简单查询) 为什么人们使用linq到sql 每个事务都会增加开销 对于中等复杂的计算,性能损失的可能性很大(DBs用于处理集和计算,并由工程师团队进行优化——为什么要搞砸这件事?) 失去了灵活性(如果您想添加另一个ui(非.NET应用程序)或访问方法,则必须将查询放回数据库或创建单独的数据访问层) 没有集中控制db上的

在这样的前提下:

  • 有能干的sql程序员 (相关性-编写sql查询不是问题)
  • 有能力的应用程序开发人员 (correlary-有简单/强大/灵活的体系结构来处理连接和来自代码的简单查询)
为什么人们使用linq到sql

  • 每个事务都会增加开销
  • 对于中等复杂的计算,性能损失的可能性很大(DBs用于处理集和计算,并由工程师团队进行优化——为什么要搞砸这件事?)
  • 失去了灵活性(如果您想添加另一个ui(非.NET应用程序)或访问方法,则必须将查询放回数据库或创建单独的数据访问层)
  • 没有集中控制db上的写入/更新/读取操作会导致安全性损失(例如,记录已更改-如果允许应用程序使用linq to sql进行更新,则无法证明是哪个应用程序更改了它或应用程序的哪个实例更改了它)
我一直看到关于LINQtoSQL的问题,我想知道我是否遗漏了什么

我一直看到关于LINQtoSQL的问题,我想知道我是否遗漏了什么

并不是说你错过了什么。这是因为你有一些大多数商店都没有的东西:

有能干的sql程序员

此外,在您的工厂中,那些有能力的sql程序员更喜欢编写sql


下面是一个逐点回答:

每个事务都会增加开销

大体上是正确的。对于许多(但不是所有!)场景,可以在需要运行查询之前使用
CompiledQuery
,通过翻译查询来避免这种情况

对于中等复杂的计算,性能损失的可能性很大(DBs用于处理集和计算,并由工程师团队进行优化——为什么要搞砸这件事?)

要么编写linq,将其转换为sql,然后从优化器生成计划,要么编写sql,优化器从中生成计划。在这两种情况下,你都在告诉机器你想要什么,而机器应该知道怎么做。您是否建议使用查询提示来颠覆优化器是一种好的做法?许多有能力的sql程序员不同意这一建议

失去了灵活性(如果您想添加另一个ui(非.NET应用程序)或访问方法,则必须将查询放回数据库或创建单独的数据访问层)

很多使用linq的人已经是SOA了。linq住在一个服务区。非.NET应用程序调用该服务。巴达宾,巴达邦

没有集中控制db上的写入/更新/读取操作会导致安全性损失(例如,记录已更改-如果允许应用程序使用linq to sql进行更新,则无法证明是哪个应用程序更改了它或应用程序的哪个实例更改了它)


这根本不是事实。证明哪个应用程序已连接并发出sql命令的方式与证明哪个应用程序已连接并调用存储过程的方式相同。

让我列出几点:

  • 有一些小型软件公司或中型公司在内部开发他们的软件,他们可能更关注于获得许多应用程序开发人员,而不是获得自由职业者DB开发人员,甚至永久雇佣一名
  • 在大多数情况下,由于要处理的数据量或低流量,开销不是问题。此外,如果使用得当,LINQtoSQL的执行速度可以与大多数SQL查询+相关的.net代码一样快
  • 许多公司只是坚持使用微软的堆栈,他们只能享受集成。其他一些公司使用SOA进行开发,这没有问题。其他人并不被迫选择LINQ到SQL,如果他们做出了选择,那么他们的问题是如何集成它。从来没有人说过LINQ对SQL是一颗银弹:)
  • 我相信使用LINQ to SQL可以获得安全性,因为我遇到过很多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)