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

Я ищу 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 не так уж и хороша.


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


Ответы (10)


NHibernate с Linq на NHibernate

person Tobias Hertkorn    schedule 11.03.2009
comment
Проверьте это: blog.dataobjects.net/2009/07/ - person Alex Yakunin; 31.07.2009
comment
Привет, Алекс, спасибо за информацию - хотя я должен сказать вам, все, что я вижу, это: NHibernate достаточно быстр для моих целей. ;) - person Tobias Hertkorn; 05.08.2009
comment
Тесты производительности всегда субъективны. Но, как я обнаружил позже, почти полная поддержка LINQ - это тоже не то, что можно сказать о NHibernate, и это гораздо менее субъективно: ormbattle.net - person Alex Yakunin; 24.11.2009
comment
Больше или больше FUD? Позорно. - person nathanchere; 23.02.2010
comment
Не предоставлять никаких фактов / ссылок и вводить пользователей в заблуждение - это действительно позорно. Я также могу сказать что-то вроде «Ух», здесь еще один фанат NH - с тем же результатом. Так что было бы неплохо увидеть хотя бы некоторые тесты, показывающие, что NH поддерживает функции X, Y и Z в LINQ, а другие - только X и Y. Но таких тестов нет - более того, в настоящее время NH не имеет таблицы, в которой четко указано, что поддерживается, а что нет (пример: goo.gl/HjW0). - person Alex Yakunin; 24.02.2010

Попробуйте 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/ < / а>.

person Alexis Kochetov    schedule 31.07.2009

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

person Craig    schedule 01.03.2009

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

person boj    schedule 01.03.2009

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

person Alexander Nikolaev    schedule 08.07.2009
comment
DataObjects сильно ошибочен. NHibernate будет гораздо лучшим решением и имеет лучшую поддержку LINQ. - person nathanchere; 23.02.2010
comment
Какие-нибудь аргументы \ факты \ ссылки на тесты? - person Alex Yakunin; 24.02.2010

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

person kevinw    schedule 31.07.2009

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

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

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

person Sruly    schedule 01.03.2009
comment
Верно, но я бы хотел сделать это на уровне запроса. Я мог бы запросить отношение x для одного запроса, но не для другого. Но я не хочу создавать новый текст только для того, чтобы запросить один раз. - person Chad Moran; 02.03.2009

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

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

person Olmo    schedule 11.03.2009

Геном.

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

person zvolkov    schedule 03.04.2009

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

person visar_uruqi    schedule 10.10.2013