.net - Linq to Sql、Linq、类型化数据集、ADO.NET 之间的区别

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

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

所以当我参加 ASP.NET 类(class)时,这是我计划的一部分。

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

SQL是在类里面写的。我个人从来没有真正喜欢过这种方式,因为我总是发现尝试正确引用引号很烦人,而且总的来说我不喜欢它。

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

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

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

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

现在好像有很多吧。

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

我不确定这是否是全部,可能不是。

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

那么是否值得切换到与类型化数据集不同的东西?还是分别用于不同的情况?

最佳答案

LINQ 本身只是一种融入 C# 3.0 的基础技术(“语言集成查询”)——它本身没有与数据库相关的功能。 LINQ 可用于各种事物 - 数据库、XML、内存中的对象、 Entity Framework 实体、Active Directory - 应有尽有。

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

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

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

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

马克

关于.net - Linq to Sql、Linq、类型化数据集、ADO.NET 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1081916/

相关文章:

.net - ASP :literal printing in final markup from kentico

c# - C#获取属性的时候需要加锁吗

c# - ObservableCollection 如何触发 Replace 操作?

c# - 如何在ABP框架中复制SQL的ORDER BY NEWID()?

.net - 程序集锁定规则以及影子副本何时有用?

database - 带有数据库的 ReasonML 示例 Web 服务器

asp.net - 本地主机当前无法处理此请求

c - C 数据库中的通用查找函数

c# - Linq-to-SQL 加载 1 :1 Relations in a single query

c# - 如何在单元测试期间覆盖 IQueryable 的 Contains 方法?