LINQ to SQL与ADO.Net的比较

30
LINQ to SQL和ADO.net之间有什么区别?
6个回答

29

ADO.NET是.NET Framework的底层数据访问API(类似于Java中的JDBC)。它自.NET首个版本发布以来一直存在。

LINQ to SQL是建立在ADO.NET和新语言特性之上的数据访问框架,以面向对象编程的方式原生地提供SQL Server数据。


8
你需要先理解LINQ是微软用于查询各种结构化数据的声明式编程范式,可以想象成“一环掌管所有”。LINQ to SQL仅仅是第一个实现版本,专门用于查询关系型数据库。
事实上,微软对于LINQ与SQL的关系有些混淆。我认为问题在于它被视为其他抽象策略的替代品,经常被程序员视为避免学习SQL技能的方法。
ADO.Net将面向对象编程(OOP)和关系型数据看作各自独立的事物,并期望你按照其各自的规则正确处理它们。
这两种方法的优缺点还有待讨论。但如果你同意微软计算机科学巨匠们已经为结构化数据查询设计了一种超级抽象方法,那么你可能会倾向于朝这个方向发展。有一些迹象表明其他软件产品供应商也愿意参与进来,所以它甚至可能不会完全成为专有技术,这是一件好事。

7
这两种技术有相当大的差异,很难在短时间内进行全面的说明。但我会尝试突出重点。
在Linq2Sql中,您需要将查询写入内存对象中。然而,在底层,您编写的代码被转换为表达式树,并在运行时进一步转换为SQL语句,然后才能运行查询。在ADO.Net中,您直接构建针对服务器运行的SQL查询。
Linq2Sql在C#和VB.Net中具有直接的语言支持。ADO.Net提供基于字符串的查询支持,除了原始字符串之外,没有任何语言支持。
Linq2Sql中的语言支持使查询类型安全。在ADO.Net中,必须将所有查询结果转换为适当的类型,这实际上取消了类型安全检查。

2

此外,我不太确定我的理解是否正确。但是ADO.NET总是与您的数据“离线”工作。我认为LINQ2SQL是在线处理您的数据。


1
这并不完全正确。如果您使用 ADO.NET DataAdapter 来填充 DataSet,则是在“离线”状态下工作。但是,如果使用 DataReader,则可以说是在线(连接)的状态。 - Dror Harari

1
以下图示概述了ADO.NET LINQ技术与高级编程语言和支持LINQ的数据源之间的关系。 LINQ and ADO.NET
(来源: microsoft.com)

>

来自 http://msdn.microsoft.com/library/vstudio/bb399365

LINQ 帮助你将 ADO.NET 集成到编译器可以评估并帮助你使用 IntelliSense 等功能的代码部分中。 因此,使用 LINQ 可以更轻松地使用 ADO.NET...


1

ADO.NET是一组类库,它在.NET基本类库之上提供了基本的数据访问基础设施。它还包含基本的LINQ基础设施,例如Enumerable的静态类(提供LINQ to Object)和一个接口来对关系数据进行基本查询,如IQueryable。

LINQ to SQL不是一个数据访问框架。

ADO.NET可以被认为是一个数据访问框架,但这可能会误导人,因为ADO.NET不是一个独立的产品。ADP.NET真正是.NET Framework的一部分。

LINQ to SQL只是LINQ的一种实现,用作连接和直接映射到SQL Server的数据提供程序。在LINQ to SQL下面,包含了System.Data.SqlClient命名空间中ADO.NET类的大量使用,因此它是建立在ADO.NET之上的,但专注于并且特定于访问SQLServer。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接