🧝♀️ Нужен ли еще Entity Framework в 2026 году?
Пытался недавно в очередной раз посмотреть, могу ли я перевести базу знаний на .NET 10. И – нет, все еще не могу. Потому что нужно дождаться когда выйдет совместимая версия библиотеки Pomelo которая отвечает за общение EF с MySQL. И это в очередной раз заставило меня задуматься о пользе которую я вообще получаю от EF.
➕ В теории плюсы:
1) Автоматизированное создание миграций
2) Написал класс и все – можешь работать
3) Писать запросы на LINQ удобнее, пототму что есть автокомплит и проверка компилитором.
4) И самая главная киллер-фича – я в любой момент могу переехать на новую базу данных.
Казалось бы. Но на самом деле в современном мире все эти плюсы довольно сомнительные,
➖ Потому что минусы буквально по каждому пункту:
1) Сейчас миграцию я могу написать агентом, так что на это я потрачу столько же времени сколько на ревью миграции которую сгенерит EF.
2) Мапперы из базы в модель я теперь тоже могу генерить агентами, так что плюс нивелируется
3) Может это конечно не всегда опция, но с TestContainers проще и надежнее написать на сложный запрос интеграционный тест и проверить, что он выполняется. Но вообще это нужно делать и для EF, потому что некоторые запросы в целом могут не смапиться нормально и попросить у вас переписать некоторые операторы на EF функции.
4) Ну и переезд на другую базу – звучит как крутой аргумент. Пожалуй даже единственный, который может сейчас определить нужен вам EF или нет. И в целом он даже выстреливал именно на базе знаний. Вот тут Арсений писал про это дело статью. Но в любом случае переезд базы – это крупная операция, в которой большую долю времени займет перенос данных. Предугадать, что в вашем переезде именно запросы будут бутылочным горлышком – ну это довольно сложно. Мне кажется это можно предугадать только если вы намеренно захотели это сделать.
Но даже из четвертого пункта следуют довольно 🚱 неочевидные минусы:
Если вы выбрали путь джедая и хотите иметь возможность переехать к примеру с MySQL на Postgress по клику. То попрощайтесь со встроенными функциями MySQL. Хотите заюзать INSERT ... ON DUPLICATE KEY UPDATE? Если планируете переезд, то придется отказатся от этой фичи. И EF тут не поможет. Этот запрос в любом случае придется переписывать.
Ну и далее сложности с поддержкой устройства самого EF.
1) Это довольно нетривиальный фреймворк, на его изучение вполне может уйти сравнимое время на изучение особенностей какой-то конкретной БД.
2) В какой-то момент вы поймаете себя на мысли, что пытаетесь не только разобраться, как вам написать запрос чтобы он не сломался, но и как открыть и заинжектить DBContext, чтобы ничего не потекло по памяти из-за неправильно использованного Change Tracker.
3) Разумеется вам постоянно еще нужно будет следить, чтобы не случился N+1. Не сказать, что это сложно, но блин, впопыхах можно и пропустить.
4) Ну и да, вам нужно будет ждать, когда не только нугет EF обновится, но и коннектор. Что потенциально + 1 зависимость
🅰️ Короче, все весомые плюсы, которые были до эпохи агентов у EF закончились, как мне кажется. Так что лично я бы для нового проекта эту штуку не выбрал в 2026 году. Вот такие дела.
Post #372
565
- 😱 2
- 🤝 2
- 💯 1