3

私が持っているアプリケーションはローカリゼーションを使用しています。それが構築される方法は、エンティティを調べて (構造をたどって)、「翻訳」としてマークされたすべてのプロパティを翻訳することです。

翻訳は別の翻訳テーブルに保存されます。

これはすべて問題ありませんが、翻訳を使用してエンティティを更新すると、「デフォルト」値で翻訳された値が取得されるという問題が残ります。そして、私はそれを望んでいません。

もっとうまく説明してみましょう。

データベース:ここに画像の説明を入力

フットプリント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 を使い続けることができるように、マッピングでこれを簡単にマークする方法があることを願っています。

4

1 に答える 1

2

プロパティを更新不可としてマークします。

Map(x => x.Description).Not.Update();

そうするための規則を定義することさえできます

class TranslatedPropertiesConvention : AttributePropertyConvention<Translated>
{
    public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance)
    {
        instance.Not.Update();
    }
}
于 2013-01-07T09:42:35.453 に答える