Linq to Sql,Linq,Typed Datasets,ADO.NET之间的区别

时间:2009-07-04 10:04:26

标签: .net database linq linq-to-sql ado.net

我一直在想这个问题。好像现在有这么多方法,我不知道什么时候用什么?或者,如果有一点可以学习它们。就像我不知道他们是否基本上做了所有相同的事情,只是基本上坚持一个,直到你掌握它,然后可能看看其他的。

所以,当我参加一个属于我的课程的ASP.NET课程时。

我们首先做了ADO.NET,我们只是在代码中用SQL语句编写了所有内容。然后我们转向了3层架构。这是通过制作类似的类并使用返回内容的数据集来完成的。

SQL是在课堂上编写的。我个人从来没有真正喜欢这种方式,因为我总是发现它很烦人,试图得到正确的报价,只是总体上不喜欢它。

然后我在Asp.net网站上找到了我真正喜欢的3层拱门教程。他们使用类型化数据集。您将数据集文件添加到DAL文件夹,您将通过GUI创建表适配器和东西。然后你会在这些GUI中编写代码,我发现它是完美的解决方案,因为现在我的SQL代码远离我的代码而且我不必担心引号和所有那些不正确的东西或关闭连接和东西加上它甚至有一个SQL GUI构建器!

然后我只需要在BLL文件夹中创建文件并创建一个属性来获取表适配器并编写我的业务层逻辑。

我唯一不喜欢的是因为它是键入的,如果我的东西试图返回一些新的行,它会发疯。

因此,当我不得不连接表时,我通常不得不制作一个新的表适配器。

现在似乎有这么多。

  • Linq - >有些人说会取代ADO.NET,有些人说它不会。
  • Linq to sql
  • ado.net

我不确定是否所有这些都不是。

在写这篇文章之前,我做了一个快速检查,看看linq到sql是什么,看到一些帖子说MS正在杀掉它。他们来自2008年,所以我不知道这是不是真的,但我注意到几乎所有的MVC书都像linq一样使用sql所以我认为不是。

那么是否值得切换到不同类型的数据集?或者每个都用于不同的情况?

3 个答案:

答案 0 :(得分:21)

LINQ本身只是一种基础技术(“语言集成查询”),它融入了C#3.0 - 它本身就有的数据库。 LINQ可用于各种事物 - 数据库,XML,内存中的对象,实体框架实体,Active Directory - 您可以命名它。

Linq-To-SQL是一种轻量级,简单易用的MS-SQLServer技术,它允许您轻松地将SQL Server表用作.NET应用程序中的真实对象。它是一个“对象关系映射器”,可以更轻松地处理数据库。它只是SQL Server,微软不会进一步扩展它 - 它也可以在.NET 4.0中使用,但不会再进一步​​开发了。

ADO.NET是.NET中的基础数据访问技术 - 它允许您访问各种各样的数据存储,关系和非关系。这是最基本的技术 - 您以非常低级的原始方式处理数据。

最重要的是,您拥有ADO.NET数据集,它们有点像Linq-to-SQL,因为它们使得处理数据库变得更加容易。与Linq-to-SQL相反,您不是在.NET代码中处理域模型中的对象,而是处理面向数据库的行和列,就像它们一样存在于数据库中。它更直接地表示数据库中的内容,它位于较低级别,它与数据库布局紧密耦合,并且它不像Linq-To-SQL对象那样“好”且易于使用 - 您处理的是低级别的行和列及其值。

如果您现在可以选择,除了SQL Server之外不需要任何东西,我强烈建议您查看Linq-to-SQL - 从原始数据库表到漂亮且易于使用的.NET对象的映射让你的生活变得更轻松!

马克

答案 1 :(得分:12)

澄清LINQ-to-SQL的故事;它不是“死” - 它是.NET框架的一个完全支持的部分,并且正在积极开发中(Redmond有一个LINQ-to-SQL团队)。

关键是新功能开发主要进入EF,包括(希望)弥合LINQ-to-SQL(通常非常流行)和EF(已经过去)之间的差距在很多方面受到批评)。

例如,4.0 in中的EF支持POCO对象,如LINQ-to-SQL。

就个人而言,我仍然是LINQ-to-SQL的粉丝,很乐意将它用于新版本 - 但我会将所有这些隐藏在存储库界面后面,以便我可以随意交换任何工具:

  • raw ADO.NET
  • LINQ到SQL
  • NHibernate的
  • LLBLGenPro
  • 实体框架

不会触摸的一件事是DataSet ;-p

答案 2 :(得分:4)

我想说如果你在使用ADO.NET在SQL语句中获取引号时遇到问题,那么你可能会以错误的方式构建SQL语句。容易发生 SQL injection或者至少:凌乱的代码。

LINQ to SQL使用ADO.NET来做这件事。它基本上是Object-relational mapping(ORM)工具与新查询语法相结合的组合。我不会把时间花在LINQ to SQL上,因为微软宣称它已经过时了。

实体框架是LINQ to SQL的替代品。它是一个ORM工具,它带有自己的SQL,如查询语言,Entity SQL。您可以在其上使用LINQ,以便大多数简单查询与LINQ to SQL中的查询完全相同。

使用何种方法很大程度上取决于您尝试做什么。我不会使用类型化的DataSet(或任何DataSet)。我猜这是个人偏好,但是如果你可以创建类型化的DataSet,那么最好进行全面的对象关系映射。

了解基本的ADO.NET是一项非常有用的技巧,但是你看一下它。特别是如果您需要在不首先检索数据的情况下更新数据库中的多个记录,您将始终最终编写SQL语句。我建议为这些案例创建存储过程,您可以使用普通的ADO.NET调用它们,或者您可以将它们添加到实体框架中的模型中并通过那里调用它们。

实体框架为您提供了一些数据库独立性(与LINQ to SQL不同)。有围绕Oracle的实现,但我个人没有经验。据我所知,如果你正在进行半复杂的工作,他们会施加一些不受欢迎的限制。