Свободные отображения NHibernate для локализации - PullRequest
2 голосов
/ 14 января 2011

Я пытаюсь построить базу данных из сопоставлений NHibernate и столкнулся с проблемой.

У меня много классов с локализованными строковыми значениями:

public class MyClass1 {
    public virtual int Id { get; set; }
    public virtual ShortString Name { get; set; }
    public virtual LongString Description { get; set; }
}

public class MyClass2 {
    public virtual int Id { get; set; }
    public virtual ShortString Name { get; set; }
    public virtual LongString Description { get; set; }
}

и такими языками, как

public class Language {
    public virtual string Code { get; set }
    public virtual string Name { get; set }
}

Мои классы ShortString и LongString выглядят одинаково:

public class ShortString {
    public virtual int Id { get; set; }
    public virtual IDictionary<Language, string> Values { get; set; }
}

Я хочу добиться, чтобы две таблицы (ShortString и LongString) выглядели так:

TABLE ShortString
-----------------
Id (int)
LanguageCode (nvarchar(8))
Value (nvarchar(256)) (or ntext for the LongString Table)

... с Id AND LanguageCode в качестве первичных ключей и ForeignKey к языковой таблице.

И в таблицах MyClass1 и MyClass2 я хочу, чтобы столбцы NameId (int) и DescriptionId (int) были сопоставлены с ShortString.и таблицы LongString соответственно.

Я полностью застрял.Как мне этого добиться?

1 Ответ

0 голосов
/ 25 марта 2011

Может быть, вы могли бы бросить короткую и длинную строку в целом

public class MyClass1 {
    public virtual int Id { get; set; }
    public virtual IDictionary<Language, string> Name { get; set; }
    public virtual IDictionary<Language, string> Description { get; set; }
}

public class MyClass2 {
    public virtual int Id { get; set; }
    public virtual IDictionary<Language, string> Name { get; set; }
    public virtual IDictionary<Language, string> Description { get; set; }
}

и используйте фоллинг Mapping

public class MyClass1Map : ClassMap<MyClass1>
{
    public MyClass1Map()
    {
        [...]
        HasMany(mc => mc.Name)
            .Table("ShortString")
            .KeyColumn("id")
            .AsEntityMap("language_id")
            .Element("value")
        HasMany(mc => mc.Description)
            .Table("LongString")
            .KeyColumn("id")
            .AsEntityMap("language_id")
            .Element("value", e => e.Length(1000))
    }
}

Я не могу проверить это прямо сейчас, так что, возможно, есть необходимость в настройке

...