Linq与Sql、Linq、类型化数据集、ADO.NET之间的差异

Linq与Sql、Linq、类型化数据集、ADO.NET之间的差异,.net,database,linq,linq-to-sql,ado.net,.net,Database,Linq,Linq To Sql,Ado.net,我一直在想这件事。现在好像有很多方法我不知道什么时候用什么?或者如果有必要学习它们。就像我不知道他们是否基本上做了所有相同的事情,只是基本上坚持一个,直到你掌握它,然后再看看其他的 所以当我参加ASP.NET课程时,这是我课程的一部分 我们首先喜欢ADO.NET,我们只是在代码中使用SQL语句编写所有内容。然后,我们进入了一个三层体系结构。这是通过创建相似的类和返回数据的数据集来实现的 SQL是在类中编写的。我个人从来没有真正喜欢过这种方式,因为我总是觉得试图获得正确的报价很烦人,只是总体上不喜

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

所以当我参加ASP.NET课程时,这是我课程的一部分

我们首先喜欢ADO.NET,我们只是在代码中使用SQL语句编写所有内容。然后,我们进入了一个三层体系结构。这是通过创建相似的类和返回数据的数据集来实现的

SQL是在类中编写的。我个人从来没有真正喜欢过这种方式,因为我总是觉得试图获得正确的报价很烦人,只是总体上不喜欢它

然后我在Asp.net网站上找到了我非常喜欢的三层拱门教程。它们使用类型化数据集。将数据集文件添加到DAL文件夹中,然后通过GUI生成表适配器和其他内容。然后你可以在这些GUI中编写代码,我发现这是一个完美的解决方案,因为现在我的SQL代码已经远离了我的代码,我不必担心引号和所有不正确的东西,或者关闭连接和其他东西,加上它甚至有一个SQL GUI生成器

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

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

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

现在似乎有这么多人

  • Linq->有些人说会取代ADO.NET,有些人说不会
  • Linq到sql
  • ado.net
我不确定这是否是全部,可能不是

在写这篇文章之前,我做了一个快速检查,看看LinqtoSQL是关于什么的,看到一些帖子说微软正在扼杀它。他们是从2008年开始的,所以我不知道这是不是真的,但我注意到几乎所有的MVC书籍都使用像linq到sql这样的语言,所以我不这么认为


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

LINQ本身只是一种基础技术(“语言集成查询”),它被烘焙到C#3.0中-它本身与数据库没有任何关系。LINQ可以用来对付各种各样的东西——数据库、XML、内存中的对象、实体框架实体、Active Directory——你可以随便说

LINQtoSQL是一种轻量级的、直接的、仅限于MS SQLServer的技术,它允许您在.NET应用程序中将SQLServer表作为真实对象轻松、友好地使用。它是一个“对象关系映射器”,使处理数据库更容易。它只是SQL Server,Microsoft不会进一步扩展它-它也在.NET 4.0中提供,但不会再进一步开发

ADO.NET是.NET中的基本数据访问技术,它使您能够访问各种各样的数据存储,关系型和非关系型。这是一项非常基本的技术——您以一种非常低级、原始的方式处理数据

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

如果您现在有选择权,并且只需要SQL Server,我强烈建议您查看Linq到SQL—从原始数据库表到漂亮且易于使用的.NET对象的映射真的让您的生活轻松了很多


Marc

我想说,如果您在使用ADO.NET在SQL语句中获取正确的引号时遇到问题,那么您可能以错误的方式构建SQL语句。倾向于 或者至少是:混乱的代码

LINQtoSQL使用ADO.NET来完成它的工作。它基本上是(ORM)工具与新查询语法的结合。我不会把时间花在LINQtoSQL上,因为微软已经宣布LINQtoSQL将寿终正寝

实体框架是LINQ到SQL的替代品。它是一个ORM工具,它附带了自己的类似SQL的查询语言实体SQL。您可以在上面使用LINQ,以便大多数简单查询与LINQtoSQL中的查询完全相同

使用什么方法在很大程度上取决于您正在尝试做什么。我不会使用类型化数据集(或者任何真正的数据集)。我想这是个人的偏好,但如果你能创建类型化数据集,你最好做全尺寸对象关系映射

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


实体框架为您提供了一些数据库独立性(不同于LINQ到SQL)。有很多针对Oracle的实现,但我个人没有这方面的经验。据我所知,如果你在做半复杂的工作,他们会施加一些不必要的限制。

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