Мы пытаемся создать сайт, который будет поддерживать многоязычные данные, и мы используем asp.net и nhibernate для отображения O / R. После некоторого поиска в Google мы решили, что для нас лучше всего создать классы сущностей, содержащие все поля, необходимые для поддержки языка по умолчанию (английский), и для каждого многоязычного класса мы создадим новый класс, содержащий только многоязычные поля плюс идентификатор основного (английский) класс и идентификатор языка. Например, в простом классе «product» у нас могут быть поля:
продукт
int ID
строка DescriptionInEnglish
строка FullDescriptionInEnglish
десятичная цена
и второй класс "product_Lang", содержащий
product_Lang
int Product_ID
int Language_ID
Строка Описание
строка FullDescription
тогда для возможности загрузки продукта на любом языке мы могли бы добавить product_Lang *1022* с именем lang к products и для простого связывания мы могли два свойства только для чтения:
string DescriptionToBind
{
get
{
if (lang != null)
return this.lang.Description;
else
return this.DescriptionInEnglish;
}
}
string FullDescriptionToBind
{
get
{
if (lang != null)
return this.lang.FullDescription;
else
return this.FullDescriptionInEnglish;
}
}
для загрузки некоторых продуктов мы можем использовать некоторые методы в ProductRpository, например:
Product GetProductByID(int ID);
Product GetProductbyID_ML(int ID, int Language_ID);
и для загрузки некоторых коллекций
IList<Product> GetAllProducts();
IList<Product> GetAllProducts_ML(Language_ID);
Проблема заключается в том, как сопоставить свойство Lang внутри класса продукта в nhibernate.
Это может быть легко, но я не могу понять. Это не один к одному, потому что в английском языке язык не обязателен. Я думал об одном ко многим, поэтому я загружаю список всех, но я думаю, что не справедливо загружать все языки, потому что мне нужен только один.
Любая помощь? или какие-то другие предложения все равно дадут честную работу?