LINQ是一个ORM(对象关系映射器)吗?

时间:2011-11-17 07:28:33

标签: linq orm

LINQ是ORM吗?

我听说很多人都说LINQ遵循对象关系映射器的规则。但我不明白;这是真的吗?

5 个答案:

答案 0 :(得分:16)

LINQ是一种C#/ VB.NET语言语法和一组用于查询数据的方法签名。

此语法有许多提供程序,其中一些是ORM。最简单的情况是在内存中查询不是ORM的集合。还有一些方法可以使用相同的语法和相同的方法集(不同地实现)来查询XML,Active Directory和许多其他非ORM的方法。

实际上,每个严肃的.NET ORM技术都有一定程度的LINQ支持

LINQ to SQL是第一个支持LINQ的ORM,它是一种概念证明。它易于学习和轻量级,但缺乏很多功能。它仍然相当不错,Stack Overflow使用它(我不确定它们是否仍然使用它)。 实体框架拥有LINQ to Entities提供商,它是微软的重量级人物。 NHibernate有一个LINQ提供程序,在我看来几乎没有用,但有一天他们可能会修复它

还有更多的ORM,其中大部分都有一定程度的LINQ支持。

答案 1 :(得分:12)

好的人,在我之后重复:

LINQ is NOT about working with databases.

LINQ是一个用于处理数据的抽象层,它允许对可以枚举的任何内容进行基于集合的操作,投影,过滤器等。它恰好有处理关系数据的提供者(LINQ to SQL,LINQ to Datasets,LINQ to Entities)。

答案 2 :(得分:7)

  

是LINQ ORM吗?

没有。 Linq本身不是一个ORM。

此代码使用Linq to Objects,它仍然有效Linq:

var someData = new int[] { 5, 3, 2, 7, 4 };
var someResults = someData
    .OrderByDescending(i => i)
    .Take(3)
    ;

这里有一些Linq to XML代码:

IEnumerable<XElement> partNos =
    from item in purchaseOrder.Descendants("Item")
    where (int) item.Element("Quantity") *
        (decimal) item.Element("USPrice") > 100
    orderby (string)item.Element("PartNumber")
    select item;

这些代码示例都与Object Relational Mapping无关,因为它们不映射对象,也不与关系数据库一起使用。

Linq已经与一些ORM技术一起使用了:

  • Linq to Entities允许您使用Linq访问实体框架ORM。
  • Linq to NHibernate也为NHibernate做了同样的事情。

您可以通过查看此库和相关文章了解Linq本身的工作原理。他们处理Linq to Objects,但会为你提供Linq本身如何工作的基础:

http://code.google.com/p/edulinq/

它会告诉你Linq不需要与ORM有任何关系。

答案 3 :(得分:5)

LINQ是语言集成查询,不是ORM 它可以用作ORM产品(如Entity Framework或Telerik Open Access或NHibernate)之上的查询层。 ORM就像你说的对象关系映射器 - 它将数据库层中的实体与实体之间的映射映射到面向对象的代码中 - 代表应用程序中数据库的类。 有关进一步的讨论,请参阅this question

答案 4 :(得分:5)

如果我们使用术语对象关系映射的维基定义,

计算机软件中的对象关系映射(ORM,O / RM和O / R映射)是一种用于在面向对象编程语言中的不兼容类型系统之间转换数据的编程技术。这实际上创建了可以在编程语言中使用的“虚拟对象数据库”。尽管有些程序员选择创建自己的ORM工具,但有可用的免费和商业软件包可以执行对象关系映射。 http://en.wikipedia.org/wiki/Object-relational_mapping

然后是的,LINQ是一个ORM,因为它是一种编程技术,用于在面向对象的编程语言中的不兼容系统之间转换(和查询)数据,实际上创建了一个“虚拟对象数据库”,它可以是在编程语言中使用。