Linq to SQL或Linq to DataSet?

时间:2009-03-06 12:35:42

标签: .net linq linq-to-sql linq-to-dataset

我是Linq世界的新手并且正在探索它。我正在考虑在我的下一个涉及数据库交互的项目中使用它。

从我读过的内容来看,我认为有两种不同的方式与数据库进行交互:

  • Linq to SQL
  • Linq to DataSet

现在我要处理的产品,不能依赖于数据库的类型。例如,它可能与SQL server / Oracle一起部署。

现在我的问题是:

  1. 如果我使用Linq to SQL,我是否只使用SQL服务器?
  2. 我想我可以将Linq用于SQL Server和Oracle的DataSet。但是,如果我使用Linq to DataSet for SQL server(与Linq to SQL offcourse相比),我会失去一些东西(编程的容易程度,性能,可靠性等)。

6 个答案:

答案 0 :(得分:11)

你是正确的#1 - Linq to Sql只能用于SQL Server数据库。

如果您希望能够访问不同的数据源(使用不同的提供程序),我将使用ADO实体框架。在使用类似POCO的实体方面,您可以获得类似的灵活性,并且可以非常轻松地扩展以实现更高级/复杂的实现。

在我目前的项目中,我们正在使用Linq到Sql并且一切都很好,但我们有很多问题需要克服。在可扩展性方面,我发现它有时过于简单了。我写了一篇(更好的)关于Linq to Sql和实体框架here的回复。

关于问题#2 - 我不确定我是否想回到DataSet。恕我直言他们更像是过去,但如果你有一个具有特定控件(如Infragistics)的体面工具包,它会很有用。但是,我发现它们的开销对于快速事务系统来说太昂贵了。该实现没有Linq to Sql或Entity Framework的一半功能。

答案 1 :(得分:4)

回答你的第一个问题:不,o​​racle还有其他linq提供程序的实现,例如:

LinqToOracle

DbLinq

后者支持更多数据库,如SqLite。

同时结帐ADO.NET Entity Framework

答案 2 :(得分:3)

  1. 是的,它只是SQL Server。此外,微软已经冻结了L2S,并且不会进一步改进它。但它是一个很好的框架,表现非常好并且易​​于使用。
  2. Linq to DataSet在从数据库中提取数据后以数据集的形式访问数据集。 Linq to SQL使用IQueriable来实际构建动态SQL查询。在许多情况下,L2S的性能会更好,并且可以让您免于编写数据库代码。
  3. 您应该了解Linq to Entities。这是最全面的框架。现在,它主要用于SQL Server,但您将及时支持Oracle等。

答案 3 :(得分:2)

  1. 您不会只使用SQL服务器。理论上,您可以为任何数据库构建linq提供程序。 Linq to Oracle http://www.codeplex.com/LinqToOracle上有一个关于codeplex的项目。我自己没试过。

  2. 您如何将数据导入数据集?我不认为您要将整个表格提取到数据集中?那将是一个严重的性能问题。如果要将Linq用于数据集,则需要自己编写所有SQL查询以从数据库中获取数据,而不是让linq创建sql查询。因此,您实际上首先必须查询数据库,然后查询数据集。对我来说似乎是双重工作......

答案 4 :(得分:1)

当你使用Linq to SQL时,据我所知,你几乎会陷入SQL Server。

如果你使用Linq to DataSet,你将失去一些编程的简易性:使用Linq,你可以直接使用Linq实体,而使用DataSet,你必须继续使用DataSet名称(MyDataSet.Entity = new MyDataSet .Entity()),一段时间后变老了。我认为这是唯一的牺牲。

但是,你可以使用它,例如Oracle(在项目上做到了这一点)。对DataAdapter进行更多控制也是非常拖沓的(据我所知 - 我从来没有那么多调整Linq-to-SQL),你可以指定(例如)使用哪些查询等等。

由于您仍然可以在DataSet中定义表之间的关系,因此您仍然可以使用Linq,因此您不会真正看到问题。

我认为Linq-to-DataSet的可靠性与Linq-to-SQL一样好(从未遇到过问题),性能似乎已经足够好了,但从来没有真正描述过它。

答案 5 :(得分:1)

您不会只停留在SQL Server上。 我们为Oracle,MySQL,PostgreSQL和SQLite服务器提供LINQ to SQL实现。 获取更多信息here 与LINQ to SQL技术相比,DataSet不太方便。 查看Entity Framework选项作为替代方案。 您可以使用一个概念模型编写多个存储模型,然后并行使用SQL Server和Oracle数据库。