【发布时间】:2011-05-29 22:38:48
【问题描述】:
LINQ 是使用 .NET 实现数据到对象自动映射的最佳解决方案吗?谁能给我一些其他解决方案来自动创建数据库表和存储过程映射?
是否可以自动将 LINQ(或其他解决方案)结果转换为
Dataset或Datatable?
【问题讨论】:
-
LINQ 不是 ORM。 跟我说吧。
LINQ 是使用 .NET 实现数据到对象自动映射的最佳解决方案吗?谁能给我一些其他解决方案来自动创建数据库表和存储过程映射?
是否可以自动将 LINQ(或其他解决方案)结果转换为 Dataset 或 Datatable ?
【问题讨论】:
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 上有文章,但这与对象关系映射无关。
【讨论】:
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();
【讨论】:
对于新应用程序,您可能应该使用 Entity Framework 或 NHibernate。两者都是成熟的 ORM 解决方案,都支持语言集成查询的 LINQ。
LINQ-to-SQL 是一个选项,但它几乎被弃用,取而代之的是实体框架。您不应该将它用于新应用程序。
DataSet 与 ORM 完全相反。他们正在一个对象中创建关系数据的内存表示,其唯一目的是表示该数据。它们适用于非常快速的结果或当您的数据真正动态时,但通常远不如任何真正的 ORM 解决方案。
【讨论】:
亚瑟,你的问题并没有真正意义上的回答,因为它是书面的。
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
}
也许如果您可以发布更多您想要实现的目标,我们可以给您一些更好的建议。
【讨论】:
1) LINQ 是一种查询语言,它不是 ORM。只需查看wiki page 即可获得可用的 ORM。不知道自己会用在哪里,很难买到最适合自己的一款
2) hamlin11 + Castle Active Record 建议看起来像一个数据表。但我不会将 DataSet 和 DataTable 与 ORM 混合使用,因为这些技术使用不同的内存和数据更新策略
【讨论】:
虽然 LinqToSQL 在技术上不是 ORM,但如果您想要直接表到对象映射等基本功能,它是一个完美的替代品。
另一个 MS 工具是实体框架,它支持模型优先、数据库优先和代码优先模型。
Entity Framework 比 LingToSQL 更先进,因为它允许您将表拆分和组合到不同的实体以及更多高级选项。 http://www.asp.net 或 Pluralsight 有很多好视频
我不确定 Linq 是否可以轻松转换为数据集和数据表,但实际上没有任何必要,它只是从一种数据对象类型更改为另一种。
【讨论】: