LINQ是这种情况下的最佳解决方案吗?LINQ到数据集

本文关键字:LINQ 数据集 最佳 这种情况下 解决方案 | 更新日期: 2023-09-27 17:57:52

  1. LINQ是使用.NET进行数据到对象自动映射的最佳解决方案吗?有人能给我推荐一些其他的解决方案吗?自动创建数据库表和存储过程映射?

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

LINQ是这种情况下的最佳解决方案吗?LINQ到数据集

LINQ不是ORM它只是一个语言扩展,提供类似SQL查询的语法和可查询类型;"积分";将查询表达式添加到程序中。它不会将对象映射到数据库。

也就是说:

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

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

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

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

LINQ到数据集-入门

LINQ到数据集-编程指南

LINQ查询数据表示例

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到SQL的替代方案

  • 实体框架
  • NHibernate for.NET

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

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

数据集与ORM几乎相反。他们在一个对象中创建关系数据的内存表示,该对象的唯一目的是表示该数据。它们可以很快得到结果,或者当您的数据真正是动态的时,但通常远不如任何真正的ORM解决方案。

Arthur,你的问题并没有以任何意义的方式得到真正的回答。

Linq代表语言集成查询,它本身并不是一个ORM(对象关系映射)框架。然而,也有大量使用Linq的ORM,微软有两种风格,Linq到SQL和Linq到实体框架,还有第三方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
}

也许如果你能多发布一些你正在努力实现的目标,我们可以给你一些更好的建议。

1)LINQ是一种查询语言,它不是ORM。只需查看可用ORM的wiki页面。在不知道在哪里使用的情况下,很难找到最适合你的

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

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

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

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

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