Я ищу 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 не так уж и хороша.
Ответ 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/ .
Ответ 7 · Sruly
У меня были такие же проблемы с EF. Я хотел использовать его для сопоставления, но отказался от него из-за отсутствия хорошей поддержки linq.
Я не уверен, что вы имеете в виду, говоря о свойствах отношения нетерпеливой загрузки, но вы можете выполнить загрузку с помощью простого linq-2-sql.
Вы используете LoadOptions.LoadWith<T>(expression).
Ответ 10 · visar_uruqi
EntityFramework 5.0 просто потрясающий, хотя ему не хватает некоторых функций по сравнению с nhibernate, но в отношении поддержки LINQ он намного лучше, чем nhibernate. Nhibernate имеет концепцию SessionFactory и Session, тогда как entityframework имеет концепцию DbContext, она похожа на сеанс nhibernate, но намного проще в настройке и управлении, вы можете подключаться ко многим базам данных, все, что вам нужно, это для каждой базы данных определить DbContext и создать экземпляр SpecificDbContext, чтобы начать и писать запросы LINQ к конкретной БД.