LINQ是使用.NET进行对象自动映射的最佳数据解决方案吗?任何人都可以建议我自动创建数据库表和存储过程映射吗?
是否可以自动将LINQ(或其他解决方案)结果转换为Dataset
或Datatable
?
答案 0 :(得分:6)
LINQ不是ORM。它只是一种语言扩展,提供类似SQL查询的语法和可查询类型,可以将查询表达式“集成”到您的程序中。它不会将对象映射到数据库。
那说:
LINQ to SQL 是使用LINQ的ORM。同样,如您所见,LINQ本身不是ORM,但可以在ORM框架中使用。但正如AHM所提到的,还要看看Entity Framework。
一个着名的开源.NET ORM解决方案是NHibernate,它实际上是Hibernate for Java的.NET端口。
MSDN上有关于LINQ to DataSet的文章,但这与对象关系映射无关。
答案 1 :(得分:1)
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();
答案 2 :(得分:1)
对于新应用程序,您应该使用Entity Framework或NHibernate。两者都是成熟的ORM解决方案,并且都支持语言集成查询的LINQ。
LINQ-to-SQL是一个选项,但它几乎不赞成使用Entity Framework。您不应该将它用于新的应用程序。
DataSet几乎与ORM相反。他们在一个对象中创建关系数据的内存表示,其唯一目的是表示该数据。它们可以快速获得结果,或者当您的数据真正动态时,但通常远远低于任何真正的ORM解决方案。
答案 3 :(得分:1)
亚瑟,你的问题并没有真正以任何有意义的方式回答问题。
Linq代表语言集成查询,它本身不是ORM(对象关系映射)框架。但是有一些ORM确实大量使用Linq,微软有两种风格,Linq to SQL和Linq to Entities Framework,还有第三方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
}
也许如果你能发布一些你想要达到的目标,我们可以给你一些更好的建议。
答案 4 :(得分:0)
1)LINQ是一种查询语言,它不是ORM。请参阅wiki page了解可用的ORM。如果不知道你将在哪里使用它,那么很难找到最适合你的那个
2)建议使用hamlin11 + Castle Active Record看起来像一个DataTable。但我不会将DataSet和DataTable与ORM混合使用,因为这些技术使用不同的内存和数据更新策略
答案 5 :(得分:0)
虽然LinqToSQL在技术上并不是ORM,但如果你想要直接表到对象映射等基本功能,那么它是一个非常好的替代品。
另一个MS工具是实体框架,它支持,模型优先,数据库优先和代码优先模型。
实体框架比LingToSQL更先进,因为它允许您将表拆分和组合到不同的实体和更高级的选项。在http://www.asp.net或Pluralsight
有很多好的视频我不确定Linq是否可以轻松转换为数据集和数据表,但实际上并不需要,它只是从一种数据对象类型转换为另一种数据对象。