1

奇妙な要件があります。簡単に言うと、製品の表と言語の表があります。各製品には、英語の文字列である説明が含まれています。私のアプリケーションでは、ユーザーが決定した 15 の言語のいずれかで説明を表示する必要があります。各製品には、IDictionary<Language, String>言語別に索引付けされたローカライズされた説明を含む が含まれています。すべての製品に英語の説明がありますが、すべての製品が一度に 15 言語すべてに翻訳されているわけではありません。

奇妙な要件は次のとおりです。特定の製品について、翻訳された製品説明がユーザーの言語に存在しない場合は、英語にフォールバックします。

述べたように、これはそれほど奇妙に思えないかもしれませんが、これをマッピングするのに苦労しています。ProductIdいくつかの誤った開始の後、基本的にandのクロス結合 (デカルト積) を作成LanguageIdし、翻訳テーブルと 2 回、すべての翻訳に対して 1 回、英語のサブクエリで 1 回結合するビューを SQL で作成しました。これから、COALESCE() を使用して翻訳を抽出し、製品コードと言語コードの各組み合わせの翻訳を、必要に応じて英語で取得します。したがって、基本的にこのビューの列はProductIdLanguageIdおよびTranslationです。

これをどのようにマッピングしますか?最も重要なのは、これを照会するにはどうすればよいですか? このビューからデータを読み取ることができれば十分です。

明らかに、これは少し複雑です。より良い方法はありますか?

4

1 に答える 1

1

このようなことはありますか?

<class name="Product" table="products">
  <id name="Id">  
    <generator class="native"/>  
  </id>  
  <property name="Description" />

  <map name="LocalizedDescriptions" table="descriptions">
    <key column="product_id"/>  
    <index column="language" type="String" />  
    <element column="description" type="String" />  
  </map>
</class>

ユーザー言語での記述がない場合は、エントリが辞書にあるかどうかを確認するだけです。

public string GetDescription(string language)
{
    return LocalizedDescriptions.ContainsKey(language) ? LocalizedDescriptions[language] : Description;
}
于 2013-01-16T10:41:53.833 に答える