Локализованные таблицы и платформа Entity Framework

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

Скажем, у вас есть приложение, которое может создавать животных, если пользователь является английским, значение свойства "Имя" животного будет введено как "Cat" в пользовательском интерфейсе, тогда как оно будет введено как "Чат" в французский.

Таблица культуры животных будет содержать 2 записи, указывающие на одно и то же животное в родительской таблице.

При чтении значений назад, если значение "Имя" не существует в культуре пользователя, будет использоваться значение по умолчанию (значение, изначально созданное объектом). На следующих диаграммах показано, как данные хранятся в SQL:

alt text

Я пытаюсь сопоставить эту схему с объектной моделью с помощью Entity Framework, я немного смущен относительно того, как лучше всего подойти к проблеме.

Соответствует ли EF этому? Должен ли я использовать EF4?

Эта модель EF будет использоваться службами .NET RIA.

Спасибо,

Пьер-Ив Троел

Ответ 1

То, что я сделал в подобной ситуации, создало представление say LocalizedAnimals, которое является плоским представлением этой 2-х табличной структуры и создало EF-модель для этого представления. Поэтому, когда мне нужно отобразить французские данные о животных, я бы отфильтровал эти LocalizedAnimals и получил хороший простой список объектов в результате.

Что-то вроде этого:

var localizedAnimals = myContext.LocalizedAnimals.Where(
                           p => p.CultureName == Thread.CurrentThread.CurrentUICulture.Name
                       );

Ответ 2

Я не уверен, что вы захотите сделать это в базе данных. Я думаю, было бы разумнее использовать файл конфигурации или ресурс, который определяет имена, специфичные для культуры.

Вы также можете проверить документацию Microsoft на интернационализацию и локализацию.