Linq to SQL 还是 Linq to DataSet?
Posted
技术标签:
【中文标题】Linq to SQL 还是 Linq to DataSet?【英文标题】:Linq to SQL or Linq to DataSet? 【发布时间】:2009-03-06 12:35:41 【问题描述】:我是 Linq 世界的新手,目前正在探索它。我正在考虑在我的下一个涉及数据库交互的项目中使用它。
根据我的阅读,我认为与数据库交互有两种不同的方式:
Linq to SQL Linq 到数据集现在我要开发的产品不能依赖于数据库的类型。例如,它可能与 SQL server/Oracle 一起部署。
现在我的问题是:
-
如果我使用 Linq to SQL,我是否只能使用 SQL Server?
我想我可以将 Linq to DataSet 用于 SQL server 和 oracle。但是,如果我将 Linq to DataSet 用于 SQL 服务器(与 Linq to SQL offcourse 相比),我会失去一些东西(易于编程、性能、可靠性等)吗?
【问题讨论】:
第三个选项:ADO 实体框架(在 Linq to Entities 之上) 【参考方案1】:您对 #1 的看法是正确的 - Linq to Sql 仅适用于 SQL Server 数据库。
如果您希望能够访问不同的数据源(使用不同的提供程序),我会选择 ADO 实体框架。在使用类似 POCO 的实体方面,您可以获得类似的灵活性,并且很容易扩展为更高级/更复杂的实现。
在我当前的项目中,我们使用的是 Linq to Sql,它很好,但是我们有许多问题需要克服。在可扩展性方面,我发现它有时过于简单。我写了一篇关于 Linq to Sql 和实体框架 here 的(更好的)回复。
关于问题 #2 - 我不确定我是否想回到 DataSets。恕我直言,它们已成为过去,但如果您有一个带有特定控件(如 Infragistics)的不错的工具包,它们会很有用。但是,我发现它们的开销对于快速事务系统来说太昂贵了。该实现没有 Linq to Sql 或实体框架的一半功能。
【讨论】:
【参考方案2】:回答你的第一个问题:不,oracle 的 linq 提供程序还有其他实现,例如:
LinqToOracle
DbLinq
后者支持更多的数据库,比如 SqlLite。
还可以查看ADO.NET Entity Framework。
【讨论】:
【参考方案3】:-
是的,它仅适用于 SQL Server。此外,微软已经冻结了 L2S,不会进一步细化。但它是一个很好的框架,性能非常好并且易于使用。
从数据库中获取数据后,Linq to DataSet 将数据集作为可枚举访问。 Linq to SQL 使用 IQueriable 来实际构建动态 SQL 查询。在很多情况下,L2S 的性能会好得多,而且您根本无需编写数据库代码。
您应该查看 Linq to Entities。这是可用的最成熟的框架。目前主要是针对SQL Server的,以后会支持Oracle等的。
【讨论】:
【参考方案4】:您不仅仅停留在 SQL Server 上。理论上,您可以为任何数据库构建 linq 提供程序。有一个关于 Linq to Oracle http://www.codeplex.com/LinqToOracle 的 codeplex 项目。我自己没试过。
如何将数据放入数据集中?我不认为您要将整个表提取到数据集中?那将是一个严重的性能问题。如果您打算使用 Linq 数据集,您需要自己编写所有 SQL 查询以从数据库中获取数据,而不是让 linq 创建 sql 查询。因此,您实际上首先必须查询数据库,然后再查询数据集。对我来说似乎是双重工作......
【讨论】:
【参考方案5】:据我所知,当您使用 Linq to SQL 时,您几乎会被 SQL Server 卡住。
如果你使用 Linq to DataSet,你会失去一点编程的便利性:使用 Linq,你可以直接使用 Linq 实体,而使用 DataSet,你必须继续使用 DataSet 名称(MyDataSet.Entity = new MyDataSet .Entity()),它会在一段时间后变老。我认为这是唯一的牺牲。
但是,您可以将它与例如甲骨文(在一个项目上做过)。它也几乎是拖放操作,对 DataAdapter 有更多的控制(据我所知 - 我从来没有对 Linq-to-SQL 进行过多的调整),您可以指定(例如)要使用的查询等。
由于您仍然可以在 DataSets 中定义表之间的关系,因此您仍然可以很好地使用 Linq,因此您不会真正看到那里的问题。
我认为 Linq-to-DataSet 的可靠性与 Linq-to-SQL 一样好(从来没有问题),性能似乎足够好,但永远无法真正分析它。
【讨论】:
【参考方案6】:您不仅仅局限于 SQL Server。 我们为 Oracle、mysql、PostgreSQL 和 SQLite 服务器提供 LINQ to SQL 实现。 获取更多信息here 与 LINQ to SQL 技术相比,DataSet 不太方便。 查看实体框架选项作为替代方案。 您可以使用一个概念模型编写多个存储模型,然后并行使用 SQL Server 和 Oracle 数据库。
【讨论】:
以上是关于Linq to SQL 还是 Linq to DataSet?的主要内容,如果未能解决你的问题,请参考以下文章
有利于启动; Linq to SQL 还是 Nhibernate?
LINQ to Dataset 是 LINQ to EF 的子集还是这两者是独立的?
LINQ to Dataset 是 LINQ to EF 的子集还是这两者是独立的?
DLinq 演变成哪一个——Linq to SQL 还是实体框架?