【问题标题】:Is LINQ the best solution in this scenario? LINQ to DatasetLINQ 是这种情况下的最佳解决方案吗? LINQ 到数据集
【发布时间】:2011-05-29 22:38:48
【问题描述】:
  1. LINQ 是使用 .NET 实现数据到对象自动映射的最佳解决方案吗?谁能给我一些其他解决方案来自动创建数据库表和存储过程映射?

  2. 是否可以自动将 LINQ(或其他解决方案)结果转换为 DatasetDatatable

【问题讨论】:

  • LINQ 不是 ORM。 跟我说吧。

标签: c# .net linq orm


【解决方案1】:

LINQ 不是 ORM。 它只是一种语言扩展,提供类似于 SQL 查询的语法和可查询类型,可将查询表达式“集成”到您的程序中。它不会将对象映射到数据库。

也就是说:

  1. LINQ to SQL 一个使用 LINQ 的 ORM。同样,如您所见,LINQ 本身不是 ORM,但可以在 ORM 框架中使用。但正如 AHM 所说,也可以看看 Entity Framework

    著名的开源 .NET ORM 解决方案是 NHibernate,它实际上是 Hibernate for Java 的 .NET 端口。

  2. MSDN 在LINQ to DataSet 上有文章,但这与对象关系映射无关。

【讨论】:

  • 我认为现在开始使用 Linq-to-SQL 没有任何意义。虽然微软继续说他们仍然支持它,而且它还没有死,但在我看来,Entityframework 才是他们真正关注的焦点。
  • 原因:在 LINQ to SQL 中执行简单到中等复杂度的程序更快。
  • @hamlin11,截至 2008 年,推荐的方法是使用 EF,而不是 Linq-to-SQL。 2011年用Linq-to-SQL开始新项目,真是可笑。blogs.msdn.com/b/adonet/archive/2008/10/29/…
  • 根据那篇博文得出这个结论是非常重要的。 stackoverflow.com/questions/252683/is-linq-to-sql-dead-or-alive 此外,您可以在 .NET 4.0 中使用 LINQ to SQL 更快、更简单地开发大多数中小型复杂应用程序。在我看来,“一些博主说 LINQ 已经死了”和“MS 说他们不会向它添加新功能”并不是很好的论据,支持不使用技术。也许我只是务实
  • 我很抱歉我的错误。我使用 .net 类 (Linq2SQL),它让我可以将 db 表映射到对象中。那是因为我说 Linq 是 ORM。感谢您的回复。我查看了实体框架,但发现存储过程的自动映射存在一些限制。特别是那些具有多组结果的人。有什么建议吗??
【解决方案2】:

使用 LINQ 填充数据集或数据表

LINQ to Dataset - 开始

LINQ to Dataset - 编程指南

LINQ 查询数据表Example

var query1 = from i in items
             where i.Price > 9.99
             orderby i.Price
             select i;

// load into new DataTable
DataTable table1 = query1.CopyToDataTable();

LINQ to SQL 替代方案

【讨论】:

    【解决方案3】:

    对于新应用程序,您可能应该使用 Entity Framework 或 NHibernate。两者都是成熟的 ORM 解决方案,都支持语言集成查询的 LINQ。

    LINQ-to-SQL 是一个选项,但它几乎被弃用,取而代之的是实体框架。您不应该将它用于新应用程序。

    DataSet 与 ORM 完全相反。他们正在一个对象中创建关系数据的内存表示,其唯一目的是表示该数据。它们适用于非常快速的结果或当您的数据真正动态时,但通常远不如任何真正的 ORM 解决方案。

    【讨论】:

      【解决方案4】:

      亚瑟,你的问题并没有真正意义上的回答,因为它是书面的。

      Linq 代表 Language Integrated Query,它本身并不是一个 ORM(对象关系映射)框架。然而,有些 ORM 确实大量使用了 Linq,Microsoft 有 2 种风格,Linq to SQL 和 Linq to Entities Framework,还有第 3 方 ORM 也使用了 Linq..NHibernate。

      然后您将 Linq 转换为 Dataset / Datatable 的后续问题虽然实际上没有任何意义,但也暗示您宁愿使用或绑定到数据库中间件组件,这在大多数情况下会使使用 ORM 变得非常多余。

      ORM 的作用是允许您将域模型映射到数据模型,因此在您的应用程序中,您无需考虑数据模型和结构,而只需考虑域对象... .你的代码看起来像这样......

      IEnumerable<Customer> Custs = someRepository.Customers();
      foreach(Customer c in Custs)
      {
        // Do something with the custs.
      }
      

      而不是...

      var cmd = connection.CreateCommand();
      cmd.CommandText = "Select * from customers";
      using(var reader = cmd.ExecuteReader())
      {
        // etc etc
      }
      

      也许如果您可以发布更多您想要实现的目标,我们可以给您一些更好的建议。

      【讨论】:

      • 我正在努力改进旧的 Web 应用程序。我有使用一些 SQL 查询的旧数据层。我将使用现代 ORM 自动生成的图层删除该图层。然后我会重新编写业务逻辑以使应用程序变得更快。但我想重新使用 BLL 接口(数据集)。
      【解决方案5】:

      1) LINQ 是一种查询语言,它不是 ORM。只需查看wiki page 即可获得可用的 ORM。不知道自己会用在哪里,很难买到最适合自己的一款

      2) hamlin11 + Castle Active Record 建议看起来像一个数据表。但我不会将 DataSet 和 DataTable 与 ORM 混合使用,因为这些技术使用不同的内存和数据更新策略

      【讨论】:

      • 我很抱歉我的困惑。我使用 .net 类,它可以让我将 db 表映射到对象中。那是因为我说 Linq2sql 它是 ORM。感谢您的回复。
      【解决方案6】:

      虽然 LinqToSQL 在技术上不是 ORM,但如果您想要直接表到对象映射等基本功能,它是一个完美的替代品。

      另一个 MS 工具是实体框架,它支持模型优先、数据库优先和代码优先模型。

      Entity Framework 比 LingToSQL 更先进,因为它允许您将表拆分和组合到不同的实体以及更多高级选项。 http://www.asp.net 或 Pluralsight 有很多好视频

      我不确定 Linq 是否可以轻松转换为数据集和数据表,但实际上没有任何必要,它只是从一种数据对象类型更改为另一种。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 2015-05-16
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多