学习LinqToSql还是坚持使用ADO.NET?

时间:2009-12-23 08:59:12

标签: linq linq-to-sql entity-framework ado.net linq-to-objects

我正在讨论即将推出的ASP.NET项目所使用的技术。

假设:

  • 我将使用Visual Studio 2008 SP1(.NET Framework 3.5)
  • 后端将是SQL Server 2005数据库(或可能是2008)
  • 代码将以C#
  • 编写
  • 我已经熟悉LinqToObjects和LinqToXml
  • 我也有使用ADO.NET的经验和一些已经构建的库
  • 项目相对较小
  • 该网站将以五个屏幕为特色
  • 数据库可能有六到七个表
  • 可能会有25-50个活跃用户
  • 每日交易量可能约为5-10个
  • 将存储最少的个人数据
  • 失败或网站被黑客攻击的后果将是最小的

选项:

  1. 编写存储过程并使用ADO.NET调用它们。完成填充DataSet后,我仍然可以使用LinqToObjects。

  2. 利用我所知道的Linq已经学习LinqToSql。

  3. 分析:

    我已经知道如何做选项1,但我真的很想使用Linq。选项2的问题在于,根据我读过的所有内容,LinqToSql可能会被弃用,而不是实体框架。

    问题:

    1. 如果您已熟悉其他Linq技术,LinqToSql的学习曲线有多陡峭?

    2. 是否值得投入任何时间学习LinqToSql,因为它可能无法由Microsoft进一步开发?

    3. 了解LinqToSql是否有一天能帮助我理解实体框架,或者它们有太大的不同?

    4. 最终,您会根据我的情况推荐哪个选项?

    5. 更新

      我不希望它在评论中迷失:marc_s指出LinqToSql 正在进一步开发,至少从.NET 4.0开始。链接:http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40

      我不知道这是否意味着LinqToSql毕竟有一个未来,但它确实让学习这项技术更具吸引力。

      我在原帖中没有提出一件事,但应该有:实体框架中的漏洞可能会影响这个项目吗?

      感谢目前为止的答案。

      进一步分析

      以下是一些LinqToSql缺点列表,基于以下一些评论:

      1. 在对基础数据库进行更改时,必须不断更新设计器中的表和项。无法“刷新”或“同步”它以便自动识别更改。
      2. 由于设计人员不按照一致的顺序生成基础文件,因此版本控制变得复杂。
      3. LinqToSql设计器生成的代码与SqlMetal不同。
      4. 存在涉及急切加载的问题/错误。
      5. 其中,第1项是我最关心的问题。即使是一个小项目,改变也是不可避免的。我记得曾经尝试使用Windows窗体设计器映射到数据库,并且它在我的脸上爆炸了很多次,我放弃了它,转而使用我自己的ADO.NET辅助类。

        然而,看起来SqlMetal似乎能够完美地满足我的需求。我运行一个命令,它从头开始从数据库中重新生成所有内容,我已经完成了。如果我保持我的数据库简单(只是表 - 没有存储过程,视图或函数),也许我只需要SqlMetal。

5 个答案:

答案 0 :(得分:10)

如果您已经知道LINQ to Xml或对象(Linq“对象”只是“列表”),LINQ to Sql非常简单......

Linq To Sql不被Microsoft弃用,他们只是建议使用EF。它不会升级。

Linq To Sql几乎与EF相似。使用EF,您可以做更复杂的事情,但在基本级别几乎相同(对于具有7个表的站点,它没有任何区别)。

根据您的情况,我建议使用LINQ。它比SP + ADO.NET更有趣,更快捷。如今使用ORM几乎是一个不错的选择。不使用它应该是例外(对我而言)。

答案 1 :(得分:5)

我同意Davide Vosti,但你可能想考虑其他选项,例如NHibernate(也有LINQ支持)。

EF的当前版本并不令人印象深刻 - 它创建了一些真正讨厌的T-SQL,需要很长时间才能执行。

我们目前正在使用EF,但这是我最后一次选择EF for .NET 3.5。我在.NET 4中再给它一次机会,但除非它有显着的改进,否则我会选择其他选项(并且LINQ to SQL不太可能是其中之一)。

答案 2 :(得分:3)

  

1.如果您已经熟悉,LinqToSql的学习曲线如何陡峭   与其他Linq技术?

对于您定义的项目范围,它应该是最小的。做简单的事情很简单,更高级的概念需要了解它如何在引擎盖下工作,但同样,没有什么是惊天动地的。

  

2.考虑到它可能,任何时候都值得投资学习LinqToSql   不是由微软进一步开发的?

我想说的是,如果你已经使用了Linq技术,那就不难发现。此外,正如marc_s指出的那样,微软将继续支持和开发Linq2Sql。 Scott Hanselman将Linq2Sql用于他的书呆子晚餐项目(http://nerddinner.codeplex.com/

  

3.了解LinqToSql是否有一天能帮助我理解实体框架,或者他们是否有太大的不同?

我使用了很多Linq2Sql并且只使用了一小部分实体框架,它们相似但不同。基础知识大致相同,我没有涉及任何超级高级用例。

  

4.最后,您会根据我的情况推荐哪种方案?

如果我正在开发像您提议的网站,我会认真研究Linq2Sql,您可能会在几个小时内完成基础工作,并在学习曲线大于您想要处理的情况下做出决定。 (恕我直言,我怀疑你会发现情况确实如此。)

答案 3 :(得分:0)

  

1 - 如果你已经熟悉的话,Linq-to-Sql的学习曲线有多陡峭   与其他Linq技术?

我会说你已经解决了50%的学习曲线,但它可能或多或少,我只是在猜测。 LinqToSql还有很多,而不仅仅是Linq。

  

2 - 是否值得投资任何时间学习Linq-To-Sql   不是由微软进一步开发的?

学习任何ORM都有好处。如果我要学习ORM,LinqToSql可能会在我的列表中排名第3或第4。微软关于LinqToSql未来的沟通充其量是多云的,他们显然在向前推进EntityFramework方面付出了更多的努力。微软总是可以改变主意,你必须得出自己的结论。

  

3 - 了解Linq-To-Sql是否有一天能帮助我理解实体框架   还是他们太不同了?

所有ORM都具有相似的功能,并且学习任何一个ORM都可以帮助您了解其他ORM。 LinqToSql确实与EntityFramework共享许多相同的特性和缺点,因此存在比您预期的更多相似之处。也就是说,我建议在LinqToSql之前学习EntityFramework。

  

4 - 最终,您会根据我的情况推荐哪个选项?

在绝大多数情况下,.NET 3.5的最佳ORM显然是NHibernate。 NHibernate支持Linq,但它支持它与Microsoft ORM不同。也就是说,你没有给出明显使NHibernate优于ADO.NET的理由。我建议您不要使用LinqToSql或EntityFramework。

答案 4 :(得分:0)

看一下Subsonic,它在Linq to SQL和NHibernate的易用性方面处于一个很好的中间地带。

使用亚音速,您可以获得NHibernate的一些不错的功能,例如模型第一次开发,自动生成数据库模式以及支持除Sql Server之外的数据库。

还有一个很好的comparison page列出了三个ORMS之间的差异