2011-01-14 130 views
2

我想從NHibernate映射中建立一個數據庫,並且遇到了問題。本地化的流利的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和LanguageCode作爲主鍵和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; } 
} 

,並使用folling映射

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

我現在不能測試它所以有可能會被調整所必要的