9

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

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

  • LINQ转SQL
  • Linq 到数据集

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

现在我的问题是:

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

6 回答 6

11

您对 #1 是正确的 - Linq to Sql 仅适用于 SQL Server 数据库。

如果您希望能够访问不同的数据源(使用不同的提供程序),我会选择 ADO 实体框架。您在使用类似 POCO 的实体方面获得了类似的灵活性,并且很容易扩展为更高级/复杂的实现。

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

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

于 2009-03-06T12:48:53.633 回答
4

要回答您的第一个问题:不,还有其他用于 oracle 的 linq 提供程序的实现,例如:

LinqToOracle

DbLinq

后者支持更多的数据库,例如 SqlLite。

还要检查ADO.NET Entity Framework

于 2009-03-06T12:51:08.403 回答
3
  1. 是的,它只是 SQL Server。此外,微软已经冻结了 L2S,不会进一步细化。但它是一个很好的框架,性能非常好并且易​​于使用。
  2. Linq to DataSet 在从数据库中获取数据后将数据集作为可枚举访问。Linq to SQL 使用 IQueriable 来实际构建动态 SQL 查询。在许多情况下,L2S 的性能会好得多,并且根本不用编写 DB 代码。

您应该查看 Linq to Entity。这是可用的最成熟的框架。目前主要是针对SQL Server的,不过以后会支持Oracle等的。

于 2009-03-06T12:48:58.110 回答
2
  1. 您不仅仅停留在 SQL Server 上。理论上,您可以为任何数据库构建 linq 提供程序。有一个关于 Linq to Oracle 的 codeplex 项目http://www.codeplex.com/LinqToOracle。我自己没有尝试过。

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

于 2009-03-06T12:49:42.167 回答
1

据我所知,当您使用 Linq to SQL 时,您几乎会被 SQL Server 卡住。

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

但是,您可以将它与例如 Oracle 一起使用(在项目中这样做)。它也几乎是拖放操作,对 DataAdapter 有更多的控制(据我所知 - 我从来没有对 Linq-to-SQL 进行过多的调整),您可以指定(例如)要使用的查询, ETC。

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

我认为 Linq-to-DataSet 的可靠性与 Linq-to-SQL 一样好(从来没有问题),性能似乎足够好,但永远无法真正分析它。

于 2009-03-06T12:50:55.923 回答
1

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

于 2009-10-13T12:48:49.807 回答