Linq2db.
Ссылка на официальный репозиторий -
https://github.com/linq2db/linq2dbЭта библиотека позволяет делять linq запросы прямо в базу. Есть провайдеры для большинства баз данных.
Примеры синтаксиса:
db.Messages.Where(x=>x.Id == 20).DeleteAsync();
db.Messages.Where(x=>x.PublishDate > minDate).Set(x=>x.IsDeleted,x=>true).UpdateAsync();
int messageId = db.AddWithIdentity(message); // возвращает созданный Id записи если это автоинкрементируемый Id.
Что мне понравилось в Linq2db:
- Библилиотека очень лайтовая, простая и понятная. Синтаксис для работы с данными (обновление, добавление, удаление) очень простой и понятный. Без магии как в EF, когда надо работать со стейтом, и вызывать SaveChanges.
- Работает в среднем быстрее EF.
Сравнение производительности разных систем работы с БД для .Net.
- Отсутствует трекинг. Я понимаю что кому-то возможно трекинг нужен, но лично для меня это совсем лишний функционал усложняющий понимание самого взаимодействия с базой.
- По сути linq2db это не целый фреймворк, а просто бибиотека, которая позволяет делать linq запросы к базе. То есть она выполняет одну функцию и делает это хорошо.
- Изучение EF и понимание его работы и глубин это огромные временные затраты. Я много лет работаю с EF и до сих пор многие его моменты не знаю или непонимаю. А linq2db можно изучить реально за короткое время.
Кроме того на мой взгляд знание EF оно пустое и в перспективе не нужное. Так как идёт время на изучение этого фреймоврка, но эти знания изолированные от других областей, они чисто специфичны для EF и в других областях мало применимы.
Есть куча особенностей и паттернов чисто для EF и вероятно где-то ещё мало пригодятся.
Подчеркну что это моё мнение, и я его никому не навязываю.
Теперь по факту:
Перешёл в своём проекте на linq2db где-то 10 месяцев назад, и реально код стал более простым и понятным, и с linq2db мне оказалось проще и удобней работать.
В нём нет дополнительной функциональности такой как миграции или трекинг.
Трекинг мне вообще не нужен, а миграции делаю на
FluentMigrator. Как оказалось ручные миграции FluentMigrator даже удобнее автоматизировнных в EF.
Теперь про минусы:
- Нормальная документация практически отсутствует.
- Команда разработки библиотеки 3 человека, что существенно меньше чем у EF.
- Могут присутствовать редкие баги. Правда я писал ишью на GitHub и сразу шёл ответ от разработчиков с вариантами решения или говорили что исправят.
Кстати один из разрабочиков - русскоговорящий.
_____________________________________
Сейчас ещё интересное сравнение приведу.
У меня в проекте есть заполнение таблиц тестовыми данными, данных досточно много 10000+ записей вроде.
Когда я ещё писал проект на Windows на HDD диске, заполнение тестовыми данными проходило минут 10.
Потом я перешёл на Ubuntu и на SSD.
И позже на linq2db.
В linq2db есть BulkCopy это массовая втавка не по строкам, а большим блоком.
Я её у себя сделал.
Теперь данные заполняются за несколько секунд (1-2 секунды).
Точно сравнвние я не проводил, но приблизительно выходит что ускорение произошло в примерно 400 раз.
________________________________________
Русскоговорящая
linq2db группа на Telegram.