Обновить

Подвалы Вавилонской башни, или Об интернационализации баз данных с доступом через ORM

Время на прочтение14 мин
Охват и читатели5.2K
Всего голосов 10: ↑9 и ↓1+6
Комментарии9

Комментарии 9

А не рассматривали вариант представлений (View)? Не проще ли их интегрировать в ORM?

Таблицы или представления — нет разницы для использования с ORM, объема трафика, цены запросы и пр. Разве что, использовать хранимые (материализованные) view.

Вам надо было попробовать linq2db
Там и не такое можно сгенерировать. Практически любой полет фантазии реализуем. EF Core, скорее всего не выпустит вас за свои рамки, а они очеь строгие.

Конечно, EF жесткий.
В статье специально рассмотрены только два самых популярных ORM на .NET. А для боевого проекта при выборе технологии сыграют роль не только гибкость, но и множество факторов, в том числе распространенность, размер комьюнити. https://goo.gl/2LP128

Так расширяйте это комюнити, а не двигайтесть за толпой ;)
Я как один из разработчиков linq2db, скажу что у вас не проблема, а проблемка.
Ассоциации любой сложности, ремаппинг полей на лету и гибкая раширяемость.
Огромное количество юнит тестов гарантируют что все это будет работать и через 10 лет.
А по скорости… перед нами только ручной маппер.

Не ставлю под сомнение гибкость вашего фреймворка :)


Так расширяйте это комюнити, а не двигайтесть за толпой ;)
Ну это лозунг. Цель проекта как правило не в этом. Архитектурные решения, в том числе выбор технологий — часто связаны с рисками и/или компромиссами. Требования в боевых проектах разнятся и, быть может, linq2db в последующих проектах попадет в шорт-лист при выборе.

Огромное количество юнит тестов гарантируют что все это будет работать и через 10 лет.
Огромное количество тестов, увы, не гарантирует, что фреймворк будет поддерживаться и развиваться даже в течение ближайших трех лет.
Да и не думаю ;)
Но похоже часто нужны шашечки вместо того чтобы ехать.
SQL-запроc с учетом поиска подходящих локализаций уже более громоздкий
Соединения с таблицей t_product_localizable можно заменить на подзапросы, но это принципиально ничего не меняет.
А нельзя на 2 запроса разбить? И собрать их в коде или через JOIN с GROUP BY?

SELECT id_product, name
FROM t_product_localizable
WHERE locale IN ('ru', 'en') AND name LIKE @p1

SELECT id_product, code
FROM t_product
WHERE id_product IN (@p1)

Фактически такой подход — это ленивая загрузка многоязычного атрибута. Два раундтрипа для единичной сущности обычно дороже, чем JOIN или подзапросы. Но реализуемость для этого варианта не проверял.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
www.custis.ru
Дата регистрации
Дата основания
1996
Численность
201–500 человек
Местоположение
Россия