2011-01-14 5 views
2

Я пытаюсь создать базу данных из сопоставлений NHibernate и столкнулся с проблемой.Fluent 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) 

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

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

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

ответ

0

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

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)) 
    } 
} 

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

Обязательного
Смежные вопросы