2

多言語データをサポートするサイトを設計しようとしており、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つだけなので、すべての言語をロードするのは公平ではないと思います。

助けはありますか?または他の提案はまだ公正なパフォーマンスを提供しますか?

4

1 に答える 1

1

ASP.NET と NHibernate を使用した多言語実装に関する詳細な記事を書きました。

NHibernate と C# を使用して多言語ドメイン モデルを作成するにチェックを入れます

于 2009-07-22T02:59:53.167 に答える