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

Kum*_*PMP 16 linq orm

LINQ是ORM吗?

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

Sti*_*gar 18

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支持.


Jim*_*ley 13

好的人,在我之后重复:

LINQ不是关于使用数据库.

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


Mer*_*ham 8

是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)
    ;
Run Code Online (Sandbox Code Playgroud)

这里有一些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;
Run Code Online (Sandbox Code Playgroud)

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

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

  • Linq to Entities允许您使用Linq访问Entity Framework ORM.
  • Linq to NHibernate也为NHibernate做了同样的事情.

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

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

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


Vik*_*orZ 5

LINQ是语言集成查询,不是ORM.
它可以用作ORM产品(如Entity Framework或Telerik Open Access或NHibernate)之上的查询层.ORM是像你说的对象关系映射器-它在数据库层做实体之间的映射到实体到您的面向对象的代码-这代表了你的应用程序的数据库类.
关于进一步的讨论看这个问题.


Kob*_*kie 5

如果我们按照对象关系映射一词的wiki定义,

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

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