Поддерживает ли какой-либо .NET ORM локализованные сущности из коробки? - PullRequest
7 голосов
/ 11 февраля 2010

Мне нужно хранить локализованные объекты в базе данных (например, Продукт, который имеет Имя, которое отличается на английском и датском языках). Есть несколько хорошо известных способов сделать это, например, иметь какую-то таблицу ресурсов, содержащую значения локализованных столбцов.

Однако, кажется, это не очень легко вписать в ORM, когда я хочу получить экземпляр класса Product на английском языке и ожидаю, что значение свойства Name будет английским.

Я не хочу изобретать велосипед, и я думаю, что это проблема, которая должна быть очень распространенной. Поддерживает ли какая-либо ORM локализацию объекта из коробки?

Поскольку я нахожусь в стеке Microsoft, и очевидным выбором для ORM будет Entity Framework 4. Есть ли в EF4 какие-либо функции для поддержки этого?

Ответы [ 3 ]

9 голосов
/ 11 февраля 2010

AFAIK EF4 не предоставляет ничего подобного.

Дмитрий Максимов написал хорошую серию публикаций, посвященных реализации локализации для DataObjects.Net, информация в которой может оказаться полезной для вас, даже если вы используете (или собираетесь использовать) любую другую платформу :

1 голос
/ 17 сентября 2011

У меня точно такая же проблема (локализация контента, стек MS, ORM ...), и на данный момент я использую таблицы Resource / ResourceValue. Я использую Linq-to-SQL с шаблонами PLINQO , которые я слегка настроил для создания автоматически локализованных свойств в моих сущностях.

Шаблон обнаруживает внешние ключи в таблице ресурсов и создает соответствующий столбец.

Например, если у меня есть таблица продукта со столбцом int NameID FK, она создаст свойство string Name в моем классе продукта, возвращающее соответствующее значение в зависимости от текущей культуры потоков.

Минусы:

  • сложность для INSERTS / UPDATES (нужно играть с 3 столами, но Linq2Sql делает это не так сложно)
  • просмотр таблиц в SQL Management является болезненным, потому что текстовые столбцы - это просто внешние ключи

Я нашел этот вопрос в поисках решения "передовой практики", но пока не нашел его.

0 голосов
/ 11 февраля 2010

Возможно, вам придется посмотреть дальше, я бы использовал NHibernate и перехватчик, чтобы перехватить загрузку объекта и выполнить локализацию объекта, основываясь на текущей культуре приложения и некотором способе хранения локализованных строк.

Некоторые ресурсы:

http://elegantcode.com/2008/05/15/implementing-nhibernate-interceptors/

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...