私が持っているアプリケーションはローカリゼーションを使用しています。それが構築される方法は、エンティティを調べて (構造をたどって)、「翻訳」としてマークされたすべてのプロパティを翻訳することです。
翻訳は別の翻訳テーブルに保存されます。
これはすべて問題ありませんが、翻訳を使用してエンティティを更新すると、「デフォルト」値で翻訳された値が取得されるという問題が残ります。そして、私はそれを望んでいません。
もっとうまく説明してみましょう。
データベース:
フットプリントlinevLue のマッピング:
public class FootprintLineValueMap : ClassMap<FootprintLineValue> {
public FootprintLineValueMap() {
Table("FootprintLineValue");
Id(x => x.Id).GeneratedBy.Identity().Column("Id");
References(x => x.FootprintLine).Column("FootprintLineId");
References(x => x.CategoryValue).Column("CategoryValueId").Cascade.None();
}
ご覧のとおり、フットプリント ラインには、categoryValue を参照する複数の値があります。カテゴリ値はローカライズされています。
ここで足跡線を取得すると、フレームワークがそれを翻訳サービスに渡し、対応するカルチャの CategoryValue の名前と説明を自動的に翻訳します。CategoryValueLocal で翻訳が見つからない場合は、CategoryValue のデフォルトが使用されます。
ただし... Footprintline を保存すると、変換された値が無視されるのではなく、CategoryValue に保存されます (デフォルトを上書きします)。
CategoryValues は値オブジェクトではなく、変更される可能性があるため、読み取り専用にすることはできません。参照を Cascade.None としてマップしようとしましたが、何もしないようです。
ローカリゼーションを処理する別の方法を考え出す代わりに、TranslationService を使い続けることができるように、マッピングでこれを簡単にマークする方法があることを願っています。