2011-01-14 8 views
2

Ich versuche, eine Datenbank von NHibernate Mappings zu erstellen und habe ein Problem festgestellt.Fließende NHibernate-Mappings für die Lokalisierung

Ich habe viele Klassen mit lokalisierten String-Werte:

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

und Sprachen wie

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

Meine Short und LongString Klassen beide gleich aussehen:

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

Was ich will, zu erreichen sind zwei Tabellen (ShortString und LongString), die wie folgt aussehen:

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

... mit ID AND LanguageCode als Primärschlüssel und Fremdschlüssel zur Sprachtabelle.

Und in den Tabellen MyClass1 und MyClass2 möchte ich NameId (int) und DescriptionId (int) Spalten ShortString und LongString Tabellen zugeordnet haben.

Ich bin total fest. Wie kann ich das erreichen?

Antwort

0

Vielleicht könnten Sie

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

ganz kurzen und langen String Graben und verwenden Sie die Folling 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)) 
    } 
} 

Ich kann es jetzt testen, so könnte es nessesary

werden zwicken
Verwandte Themen