LINQ是这种情况下的最佳解决方案吗?LINQ到数据集
本文关键字:LINQ 数据集 最佳 这种情况下 解决方案 | 更新日期: 2023-09-27 17:57:52
-
LINQ是使用.NET进行数据到对象自动映射的最佳解决方案吗?有人能给我推荐一些其他的解决方案吗?自动创建数据库表和存储过程映射?
-
是否可以将LINQ(或其他解决方案)结果自动转换为
Dataset
或Datatable
?
LINQ不是ORM它只是一个语言扩展,提供类似SQL查询的语法和可查询类型;"积分";将查询表达式添加到程序中。它不会将对象映射到数据库。
也就是说:
-
LINQ to SQL是一个使用LINQ的ORM。同样,正如您所看到的,LINQ本身不是ORM,但可以在ORM框架中使用。但正如AHM所提到的,也可以看看实体框架。
一个著名的开源.NET ORM解决方案是NHibernate,它实际上是Hibernate for Java的.NET端口。
-
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是否可以轻松地转换为数据集和数据表,但实际上没有任何必要,它只是从一种数据对象类型更改为另一种。