LINQ a ORM (объектно-реляционный картограф)? - PullRequest
16 голосов
/ 17 ноября 2011

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

Я слышал, что многие люди говорят, что LINQ следует правилам картографирования объектных отношений.Но я не понимаю;это правда?

Ответы [ 5 ]

18 голосов
/ 17 ноября 2011

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

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

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

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

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

13 голосов
/ 17 ноября 2011

Хорошо, люди, повторите за мной:

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

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

8 голосов
/ 17 ноября 2011

Является ли 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 позволяет получить доступ к ORM Entity Framework с помощью Linq.
  • Linq to NHibernate делает то же самое для NHibernate.

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

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

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

5 голосов
/ 24 января 2014

Если бы мы следовали определению вики термина «объектно-реляционное отображение»,

объектно-реляционное отображение (ORM, O / RM и O / R mapping) вКомпьютерное программное обеспечение - это метод программирования для преобразования данных между несовместимыми системами типов в объектно-ориентированных языках программирования.По сути, это создает «базу данных виртуальных объектов», которую можно использовать из языка программирования.Доступны как бесплатные, так и коммерческие пакеты, которые выполняют объектно-реляционное отображение, хотя некоторые программисты предпочитают создавать свои собственные инструменты ORM. http://en.wikipedia.org/wiki/Object-relational_mapping

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

5 голосов
/ 17 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...