Linq to SQL还是Linq to DataSet?

9

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

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

  • Linq to SQL
  • Linq to DataSet

现在,我要工作的产品不能依赖于数据库类型。 例如,它可能部署在SQL Server / Oracle上。

现在我的问题是:

  1. 如果我使用Linq to SQL,我是否仅限于使用SQL Server?
  2. 我认为我可以同时使用Linq to DataSet处理SQL Server和Oracle。 但是,如果我在SQL Server上使用Linq to DataSet(与Linq to SQL相比),是否会失去一些东西(编程便捷性,性能,可靠性等)。

还有第三个选择:ADO实体框架(在Linq to Entities之上)。 - RobS
6个回答

11

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

如果你想要访问不同的数据源(使用不同的提供程序),我建议你使用 ADO Entity Framework。你可以使用类似 POCO 的实体来获得类似的灵活性,而且很容易扩展以实现更高级/复杂的实现。

在我的当前项目中,我们正在使用 Linq to Sql,它一直表现良好,但我们需要克服许多问题。我发现它在可扩展性方面有时过于简单。我写了一个(更好的)关于 Linq to Sql 和 Entity Framework 的回答 这里

关于问题#2 - 我不确定是否想回到 DataSets。在我看来,它们更多是过去的事情,但如果你有一个具有特定控件(如 Infragistics)的良好工具包,它们可能会很有用。然而,我发现它们的开销对于快速事务系统来说太昂贵了。该实现的功能不及 Linq to Sql 或 Entity Framework 的一半。


4

3
  1. 是的,只支持SQL Server。此外,Microsoft已经停止改进L2S。但它是一个很好的框架,性能非常出色并且易于使用。
  2. Linq to DataSet在从数据库中获取数据后将数据集作为可枚举对象进行访问。而 Linq to SQL 使用IQueriable来实际构建动态SQL查询。在许多情况下,L2S的效率要更高,还可以使您免于编写数据库代码。

你应该了解一下Linq to Entities。这是目前最全面的框架。现在主要用于SQL Server,但以后也会支持Oracle等。


2
  1. 你不必仅限于使用SQL Server。理论上,你可以为任何数据库构建Linq提供程序。在Codeplex上有一个Linq到Oracle的项目http://www.codeplex.com/LinqToOracle。我自己没有尝试过。

  2. 你将如何将数据导入数据集?我不认为你会将整个表格都取出来放进数据集中吧?那将是一个严重的性能问题。如果你要使用Linq到数据集,你需要自己编写所有的SQL查询语句来从数据库中获取数据,而不是让Linq创建SQL查询语句。所以你实际上需要先查询数据库,然后再查询数据集。对我来说似乎是多余的工作...


1

当您使用 Linq to SQL 时,据我所知,您将几乎被限制在 SQL Server 上。

如果您使用 Linq to DataSet,则会失去一些编程便利性:使用 Linq,您可以直接使用 Linq 实体,而使用 DataSets,则必须继续使用 DataSet 名称(MyDataSet.Entity = new MyDataSet.Entity()),这在一段时间后会变得陈旧。我认为那是唯一的牺牲。

但是,例如 Oracle,您仍然可以使用它(在一个项目中已经这样做)。它也是几乎拖放式的,有一点更多对 DataAdapter 控件的控制(据我所知-我从来没有必须调整 Linq-to-SQL 那么多),您可以指定使用哪些查询等等。

由于您仍然可以在 DataSets 中定义表之间的关系,因此您仍然可以足够好地使用 Linq,因此您不会真正遇到问题。

我认为 Linq-to-DataSet 的可靠性与 Linq-to-SQL 的可靠性一样好(从未出现过问题),性能似乎足够好,尽管我从未真正进行过性能分析。


1

您不必仅限于使用SQL Server。 我们提供了针对Oracle、MySQL、PostgreSQL和SQLite服务器的LINQ to SQL实现。 在这里获取更多信息。 与LINQ to SQL技术相比,DataSets并不那么方便。 作为替代方案,请查看Entity Framework选项。 您可以使用一个概念模型编写多个存储模型,然后并行使用SQL Server和Oracle数据库。


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