0

テーブル「RoomType」を変換しようとしています。

以下を含む「テキスト」テーブルを作成します。

Id, LangID, TranslatedText
001, EN, Single
001, IT, Singola
002, EN, Double
002, IT, Doppia

これはDBスキーマです ここに画像の説明を入力してください

テーブルRoomTypeには、ID、TextID、MaxBed 01、001、1 02、002、2が含まれます。

RoomTypeとTextを結合するnHibernateマッピングを作成し、LandID=CurrentLanguageでWHERE句を使用してRoomTypeキューイングテキストをロードできるようにする必要があります。

これは少しマッピングですが、次にどうすればよいかわかりません。

public class RoomTypeaMap : ClassMapping<RoomType>
    {
        public RoomTypeaMap()
        {
            Join("Texts", el =>
                {
                    el.Key(k => k.Column("TextID"));
                });
        }
    }

別の方法として、すべての言語の列を追加できます

ここに画像の説明を入力してください

このシナリオでは、マッピングが別の列から(優先して)部屋タイプのローカライズされた名前を取得する必要があります。

このようなもの:

public class RoomTypeaMap : ClassMapping<RoomType>
    {
        public RoomTypeaMap()
        {
            Property(el => el.Name, m =>
                {
                    m.Formula("Name_" + currentLanguage);
                });
        }
    }

この興味深い投稿を見つけましたが、役に立ちません:http: //nhforge.org/wikis/howtonh/localization-techniques.aspx

ご協力ありがとうございました!!

4

1 に答える 1

2

私は言語テーブルを取り除き、テキストテーブルをマップの要素テーブルとして持っています

public class RoomType
{
    public virtual int Id { get; set; }
    public virtual IDictionary<string, string> Names { get; private set; }
    public virtual string Name
    {
        get { return Names[Thread.CurrentThread.CurrentUICulture.Name]; } // FIXME: fall back to default language if language not available
        set { Names[Thread.CurrentThread.CurrentUICulture.Name] = value; }
    }
}

次のマッピングを使用します

public RoomTypeMap()
{
    [...]
    HasMany(mc => mc.Names)
        .Table("Texts")
        .KeyColumn("RoomType_id")
        .AsMap("language_id")
        .Element("value")

アップデート:

フォールバックを実装する

string name;
var currentlanguage = Thread.CurrentThread.CurrentUICulture;     // eg en-US
if (!map.TryGetValue(currentlanguage.Name, out result) &&        // en-US
    !map.TryGetValue(currentlanguage.Parent.Name, out result))   // en
{
    result = "fallback name";
}
return name;
于 2012-07-02T06:57:28.117 に答える