有什么不对的LINQ to SQL?(What's wrong with Linq to S

2019-09-02 18:03发布

有什么不对的LINQ to SQL?

或者 - 怎么样的LINQ to SQL会使它不适合的项目,无论是新的或现有的? 我想听听你为什么不会选择LINQ to SQL的特定项目-包括哪些项目参数使其不适合。

Answer 1:

这不是很适应数据库架构更改。 你必须重建的dbml层并重新生成您的数据环境。

如同任何ORM(我没有进入辩论是否是一个ORM与否),你就必须要知道正在发生什么SQL,以及如何将影响您的来电。

插入不成批的,所以能够在性能成本较高。

它被已停用支持实体框架

尽管它使用的是供应商模式,将允许服务提供商为其他DBMS平台构建,只有SQL Server的支持。

[ 编辑 @ AugustLights -以我的经验:]延迟加载可能需要一些黑客获得工作的。

话虽这么说,我认为,如果正确使用它,它是非常方便的



Answer 2:

对于需要使用SQL Server以外的数据库项目:

1)你是锁定在使用SQL Server

对于随着时间的推移逐渐改变复杂的实体间关系和/或关系的一个项目:

2)你被锁定在以1对1映射表的类

对于必须使用.NET的1.x版项目

3)将不会与.NET 1.x的工作



Answer 3:

  • 有没有办法混正赛延迟加载/预先加载在一个DataContext。
  • 真正的持久性无知是非常困难的。
  • 映射选项是有限的。 例如,有没有多到多的关系。
  • 重新同步与架构更改的映射是痛苦的。

尽管上述所有我认为LINQ到SQL是很多项目的最佳选择。



Answer 4:

这是很难嘲笑,因为缺乏对接口的同时,单元测试System.Data.Linq.DataContext类。 这里有一个可能的方法: 惩戒的LINQ to SQL的DataContext 。



Answer 5:

因为你不使用3.5 ... ...是一个有效的答案吗?!?!?



Answer 6:

好了,我已经开发使用LINQ to SQL某些应用程序。 其中一个我发现的主要问题是必须分层应用程序。 在LINQ to SQL类与数据访问代码非常紧密地联系在一起的实体。 此外,还有一些问题与DataContext的,这意味着你可以使用一个DataContext对象检索的项目,但你不能将项(对象)转移到另一个DataContext的(至少不容易)。

如果你不关心正确,并分层应用程序,如果你想全部是建立在一个快速的方式提出的申请也被称为快速应用程序开发的LINQ to SQL将是有益的。



Answer 7:

有很多的优势,LINQ到SQL来自理应能够构建数据的查询就在你的代码隐藏您的dbml(其中扮演着非常有限的DAL的角色)的基础上强类型可查询/枚举数据对象。 所以结果是,作为已经提到,就是它鼓励你有点朝外面玩强烈定义和分离层或层到应用程序。
为了应对这一点,它应该意味着你应该能够消除大部分或所有你在数据库上写入存储过程的任何业务逻辑的,这样的话,至少你只需要访问与数据以交易代码改变非模式影响的业务规则......但是,当你意识到它可以是多么复杂编写与外部的查询与分组聚集一起,至少当你第一次接近它,打破了一些。 所以,你会禁不住想编写SQL中的存储过程,你知道这是在做这些事情,而不是花费额外的时间试图找出了LINQ语法做时,它只是将它转换同样的事情如此简单和好丑陋的SQL代码反正...
话虽如此,我真的爱LINQ,我为它尊重,当我开始忽略这个“查询语法是更容易阅读”情绪我见过的漂浮并切换到方法的语法大大增加。 永不回头。



Answer 8:

我会将此视为一个技术性“搅局者”的唯一的事情是,如果你想使用其他的RDBMS于SQL Server。 (尽管它可以围绕工作-看到马特·沃伦的博客@ http://blogs.msdn.com/mattwar/ )

除此之外,也有一些优点和缺点在前面的回答你的问题已经列出。 然而,上述所有底片到目前为止有解决方法,使他们并不是真正的搅局者。

非技术[潜力]搅局者是MSFT会放弃它支持EF的风险...更多,在这里: http://oakleafblog.blogspot.com/2008/05/is-adonet-team-abandoning- LINQ到sql.html

尽管(在我看来)EF的当前状态为理由足以让他们继续工作L2S。 因此,让我们希望他们做...



Answer 9:

一个真正的ORM应该从你的持久性介质中分离您的业务实体的设计。 这样,你可以单独重构其中一方,并只需要保持两者之间的映射。 这减少了应用程序逻辑代码,你需要保持对数据库的修改量。

为了实现这样的使用LINQ到SQL的持久性无关的方法,你就必须在DTO的使用其生成的类和维护您的DTO和你的实体之间的映射逻辑。

有采取这种做法(如NHibernate的),大大降低了DTO的需要更好的ORM。



Answer 10:

它似乎并不具有对数据库列的缺省值的任何支持。



Answer 11:

这个问题被问过一次在这里 。 但是,在本质上的LINQ to SQL生成数据库中的次优的执行计划。 对于每一个不同的长度您搜索参数,这将迫使不同的执行计划的创建。 这最终会阻塞正在使用高速缓存执行计划在数据库中存储,你将开始到期的旧的查询,这将需要重新编译,当他们再次出现。

正如我在链接的问题提到的,它是你要完成的事情。 如果你愿意为贸易发展速度执行速度,LINQ to SQL的可能是一个不错的选择。 如果你关心的执行速度,也有其他的ORM /达尔斯/可用的解决方案,可能需要更长的时间与工作,但会为您提供对架构更改,并以额外开发成本的成本性能更好的解决方案,适应未来发展。



文章来源: What's wrong with Linq to SQL?