多言語データをサポートするサイトを設計しようとしており、O/R マッピングには asp.net と nhibernate を使用しています。グーグルで調べた結果、デフォルト (英語) 言語をサポートするために必要なすべてのフィールドを含むエンティティ クラスを作成するのが最善であると判断し、多言語クラスごとに、多言語フィールドとメインの ID のみを含む新しいクラスを作成します。 (英語) クラスと言語 ID。たとえば、単純な「製品」クラスには次のフィールドを含めることができます。
製品
int ID
文字列 DescriptionInEnglish
文字列 FullDescriptionInEnglish 小
数値
および 2 番目のクラス「product_Lang」を含む
product_Lang
int Product_ID
int Language_ID
文字列 説明
文字列 FullDescription
次に、任意の言語で製品をロードできるようにするために、製品に lang という product_Lang プロパティを追加し、 簡単にバインドするために、次のような 2 つの読み取り専用プロパティを設定できます。
string DescriptionToBind
{
get
{
if (lang != null)
return this.lang.Description;
else
return this.DescriptionInEnglish;
}
}
string FullDescriptionToBind
{
get
{
if (lang != null)
return this.lang.FullDescription;
else
return this.FullDescriptionInEnglish;
}
}
一部の製品をロードするには、次のように ProductRpository でいくつかのメソッドを使用できます。
Product GetProductByID(int ID);
Product GetProductbyID_ML(int ID, int Language_ID);
およびいくつかのコレクションをロードするため
IList<Product> GetAllProducts();
IList<Product> GetAllProducts_ML(Language_ID);
問題は、nhibernate の製品クラス内で Lang プロパティをマップする方法です。簡単かもしれませんが、わかりません。英語では lang はオプションであるため、1 対 1 ではありません。1対多について考えたので、すべてのリストをロードしましたが、必要な言語は1つだけなので、すべての言語をロードするのは公平ではないと思います。
助けはありますか?または他の提案はまだ公正なパフォーマンスを提供しますか?