Pull to refresh

Comments 15

Что то POCO ( plain old class objects) тут и не пахнет, все эти аттрибуты и navigation property засоряют модель. Пример работы с POCO — PetaPoco, берем любой класс и в него маппим результат SQL запроса. И не надо fluent городить — SQL для общения с базой — самый правильный и родной вариант.
т.е. вам от ORM необходим только маппинг?
От Object-Relational Mapper — да, мне необходим именно маппер, потому что все остальное оно делает хуже чем нативный интерфейс.
Ну и удобный способ исполнять мои запросы на языке базы данных. А не универсальный комбайн-переводчик с свистоперделками. Уже все вроде наелись с EF и признались — создание суррогатных языков, пусть даже с автокомплитами и все такое — всегда генерит худший результат (и если смотрели в профайлере — сильно худший) чем обычный SQL, который lingua franca реляционных БД.
Да, у меня бы тоже язык не повернулся назвать класс с кучей библиотечно-зависимых атрбиутов POCO.
Примерно год назад начали наблюдать LicenceException в логе после обновления на 4 версию — ввели ограничение — бесплатны только первые 10 таблиц.
По-хорошему могли хотя бы назвать коммерческий пакет по-другому чтобы не ломать код при обновлениях. В итоге перешли на Dapper, т.к. в OrmLite неизвестно что еще сломают в следующей версии.
OrmLite содержит в себе Dapper.
А чего не поддержали отечественного производителя?
Linq2Db (бывший BLToolkit) навскидку умеет все то же самое но без лицензионных заморочек. Интересно было бы сравнить его по скорости с OrmLite
Клюнул на репутацию ServiceStack, да и первое впечатление было целиком положительным: LINQ-подобные запросы, скорость… Про отечественные корни Linq2Db узнал только сейчас, спасибо. Было бы здорово видеть больше статей на подобную тему.
По-моему зря не поддержали родной LINQовский naming convention. Для разработчика непривычно видеть
db.Select<Product>(q => q.UnitPrice > 10)

гораздо привычнее
db.Products.Where(q => q.UnitPrice > 10)

Я конечно понимаю, что тема холиварная, но в .NET уже давно так. Зачем городить свой огород?
Чтобы усложнить портирование куда-то ещё, когда оно начнёт просить денег за использование, очевидно.
Entity Framework:
context.Orders.AsNoTracking().FirstOrDefault(order => order.Id == id);


Какой будет результат, если использовать EF грамотно?

context.Orders.Find(id);


Как вам должно быть известно, Find сначала ищет в контексте по Id, если не найдет — обращается к БД. Вот только в данном примере я сравнивал скорости отдельных и друг от друга независимых запросов к БД без участия кэширования. Следствие: в контексте в принципе не может быть объекта с тем же Id (создается контекст на запрос), поэтому использование Find бессмысленно.
Грамотно говоря, для большого графа объектов в контексте, использование Find может быть даже вредно, если заранее известно, что нужного объекта в контексте нет — эффективнее сразу использовать прямой запрос к БД.
В таком случае выборку из доморощенного орма тоже надо делать через [аналог] FirstOrDefault(), а не через некий db.SingleById(id), иначе начинают терзать смутные сомнения.
в OrmLite нет контекста/кэширования в принципе, а naming convention отличается от LINQ, как уже заметили в комментариях выше. Поэтому, SingleById и есть аналог FirstOrDefault, в обоих случаях будет сгенерирован схожий SQL. Вечером посмотрю точные SQL-запросы, если интересно.
Sign up to leave a comment.

Articles

Change theme settings