Подтвердить что ты не робот

Ls LINQ ORM (Объектный реляционный сопоставитель)?

Является ли LINQ ORM?

Я слышал, как многие говорят, что LINQ следует правилам Map Relation Mapper. Но я не понимаю; это правда?

4b9b3361

Ответ 1

LINQ - это синтаксис языка С#/VB.NET и набор сигнатур методов для запроса данных.

Есть много поставщиков для этого синтаксиса, а некоторые из них - ORM. Самый простой случай - это когда вы запрашиваете коллекции в памяти, которые не являются ORM. Существуют также способы запроса XML, Active Directory и многих других, которые не являются ORM, используя тот же синтаксис и тот же набор методов (реализованных по-разному).

Практически каждая серьезная технология .NET ORM имеет некоторый уровень поддержки LINQ

LINQ to SQL является первым ORM для поддержки LINQ, и это было своего рода доказательством концепции. Его легко освоить и облегчить, но он не имеет большого количества функций. Он по-прежнему довольно приличный, и Qaru использовал его (я не уверен, что они все еще используют его). Entity Framework имеет провайдера LINQ to Entities, и это тяжелый нападающий от Microsoft. У NHibernate есть провайдер LINQ, который, по моему мнению, работает не очень хорошо, но иногда он может его исправить.

Там больше ORM, и большинство из них имеют некоторый уровень поддержки LINQ.

Ответ 2

Ок, люди, повторяю за мной:

LINQ НЕ работает с базами данных.

LINQ - это уровень абстракции для работы с данными, который позволяет выполнять операции на основе, проекции, фильтры и т.д. на все, что можно перечислить. Просто есть провайдеры для работы с реляционными данными (LINQ to SQL, LINQ to Datasets, LINQ to Entities).

Ответ 3

Является ли LINQ ORM?

Нет. Linq не является ORM.

Этот код использует Linq для объектов, который по-прежнему действителен 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;

Ни один из этих примеров кода не имеет ничего общего с Реляционное сопоставление объектов, поскольку они не отображают объекты и не работают с реляционными базы данных.

Linq использовался с некоторыми технологиями ORM:

  • Linq to Entities позволяет вам получить доступ к ORM Framework ORM с помощью Linq.
  • Linq to NHibernate делает то же самое для NHibernate.

Вы можете узнать, как работает Linq, проверяя эту библиотеку и связанные статьи. Они относятся к Linq к объектам, но дадут вам основу того, как работает Linq:

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

Он покажет вам, что Linq не должен иметь ничего общего с ORM.

Ответ 4

LINQ - это Intergrated Query и не является ORM.
Он может использоваться как слой запроса поверх продукта ORM, такого как Entity Framework или Telerik Open Access или NHibernate. ORM - это, как вы говорите, Object Relation Mapper - он отображает между объектами в слое базы данных объекты в объектно-ориентированные классы кода, которые представляют базу данных в вашем приложении.
Для дальнейшего обсуждения см. этот вопрос.

Ответ 5

Если бы мы пошли по определению wiki термина Object-Relational Mapping,

Объектно-реляционное сопоставление (ORM, O/RM и O/R mapping) в компьютерном программном обеспечении представляет собой метод программирования для преобразования данных между системами несовместимого типа в объектно-ориентированных языках программирования. Это создает, по сути, "базу данных виртуальных объектов", которая может использоваться из языка программирования. Существуют как бесплатные, так и коммерческие пакеты, которые выполняют объектно-реляционное сопоставление, хотя некоторые программисты предпочитают создавать свои собственные инструменты ORM. http://en.wikipedia.org/wiki/Object-relational_mapping

то да, LINQ является ORM в том смысле, что это метод программирования для преобразования (и запроса) данных между несовместимыми системами в объектно-ориентированных языках программирования, создавая, фактически, "базу данных виртуальных объектов", которая может быть используется с языка программирования.