Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Наиболее полный ORM с поддержкой LINQ?

Автор вопроса: Chad MoranОтветов: 10

Я ищу ORM, который предлагает полную или почти полную поддержку LINQ.

LINQ to SQL
- Поддерживает все, что находится внутри LINQ (.Contains, Math.Log и т. Д.)
- Невозможно активировать свойства отношения загрузки без создания нового контекста данных

ADO.NET Entity Framework
- Ужасная поддержка LINQ (множество недостающих функций).
- Отличные функции сопоставления - Может нетерпеливо загружаться по запросу с помощью методов .Include в ObjectQuery ‹>

LightSpeed ​​
- Отличная поддержка LINQ, в которой отсутствуют некоторые функции (. Содержится в Where)
- Некоторые сгенерированные SQL очень неэффективны.

Кажется, что ни один из них не подходит идеально, я, честно говоря, хотел бы взять кусочки и кусочки от каждого. Мне лично очень нравится ADO.NET EF, за исключением того, что в нем отсутствуют функции, из-за которых его просто сложно использовать.

Я знаю, что некоторые люди хвалят NHibernate, и я не сбиваю с толку, но сегодня я попробовал его, и все в порядке, но поддержка LINQ не так уж и хороша.

  • Просто любопытно ... почему LINQ так важен для доступа к базам данных? Otávio Décio 02.03.2009
  • Почему вы говорите ужасная поддержка LINQ для EF? Какие функции отсутствуют в EF4? DamienG 13.02.2012

sqlormlinq-to-sql

Ответы

Ответ 1 · Tobias Hertkorn

NHibernate с Linq на NHibernate

Ответ 2 · рейтинг 5 · Alexis Kochetov

Попробуйте DataObjects.NET. Я один из разработчиков ДО. И последнее, что я делаю в рамках этого проекта, - это реализация LINQ для DataObjects. Итак, я мог бы описать это вкратце:

  • Поддерживает почти все методы LINQ, кроме Last / LastOrDefault / Aggregate / Reverse / TakeWhile / SkipWhile и т. Д., А также методы, которые имеют аргументы, специфичные для .NET, например IComparer (их никто не поддерживает).
  • Поддерживаются почти все строковые и математические методы (и у вас есть возможность писать свои собственные сопоставления функций!).
  • Сложные сценарии с GroupBy \ SelectMany \ Contains \ Single \ etc. в подзапросах и коррелированных подзапросах поддерживаются.

У нас около 1000 тестов реализации LINQ и 99% из них пройдены. Так что могу сказать, что текущая реализация близка к EF. Некоторые методы не работают с EF, некоторые - с нашей структурой. Проверьте это краткое описание http://www.x-tensive.com/Products/DO/ .

Ответ 3 · рейтинг 4 · Craig

Llblgen, похоже, имеет неплохую поддержку linq. У Франса есть целая серия сообщений в блогах о его разработке http://weblogs.asp.net/fbouma/archive/2007/09/11/developing-linq-to-llblgen-pro-day-0.aspx

Ответ 4 · рейтинг 3 · boj

OpenAccess http://www.telerik.com/products/orm.aspx

Ответ 5 · рейтинг 2 · Alexander Nikolaev

DataObjects.Net почти полностью поддерживает LINQ.

Ответ 6 · рейтинг 2 · kevinw

Новейшая версия SubSonic 3.0 была полностью переписана с учетом использования Linq - http://subsonicproject.com/docs/3.0_Summary

Ответ 7 · Sruly

У меня были такие же проблемы с EF. Я хотел использовать его для сопоставления, но отказался от него из-за отсутствия хорошей поддержки linq.

Я не уверен, что вы имеете в виду, говоря о свойствах отношения нетерпеливой загрузки, но вы можете выполнить загрузку с помощью простого linq-2-sql.

Вы используете LoadOptions.LoadWith<T>(expression).

Ответ 8 · Olmo

Signum Framework имеет поставщика linq, http://www.signumframework.com/DatabaseQuery.ashx и имеет совершенно другой способ загрузки объектов. Нет контекста данных.

Он отлично работает только с новыми приложениями.

Ответ 9 · zvolkov

Геном.

Genome O / RM использует LINQ для создания уровней доступа к данным, соединяющих системы реляционных баз данных, такие как Microsoft SQL Server, Oracle и IBM DB2, с вашими корпоративными приложениями .NET.

Ответ 10 · visar_uruqi

EntityFramework 5.0 просто потрясающий, хотя ему не хватает некоторых функций по сравнению с nhibernate, но в отношении поддержки LINQ он намного лучше, чем nhibernate. Nhibernate имеет концепцию SessionFactory и Session, тогда как entityframework имеет концепцию DbContext, она похожа на сеанс nhibernate, но намного проще в настройке и управлении, вы можете подключаться ко многим базам данных, все, что вам нужно, это для каждой базы данных определить DbContext и создать экземпляр SpecificDbContext, чтобы начать и писать запросы LINQ к конкретной БД.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы