NHibernateマッピングで設定できる理由を誰かに教えaccess="field.camelcase"
てもらえますか?access="field"
access="property"
編集:私の質問は、「それが何を意味するのか」ではなく、「なぜこれができるのか」です。これは開発者にとってエラーの原因になると思います。
NHibernateマッピングで設定できる理由を誰かに教えaccess="field.camelcase"
てもらえますか?access="field"
access="property"
編集:私の質問は、「それが何を意味するのか」ではなく、「なぜこれができるのか」です。これは開発者にとってエラーの原因になると思います。
フィールドだけで同じことができるのに、field.camelcaseはどのように使用されるのでしょうか。それは本当ですが、たとえばクエリを記述したり、他のマッピングからプロパティを参照したりすると、(NH)プロパティに直感的でない名前が付けられます。
フィールドを使用してマッピングしたいものがあるとしましょう。
private string _name;
public string Name { get { return _name; } }
「field」を使用してフィールドをマップすることはできますが、HQLクエリを作成する場合などは「_name」を作成する必要があります。
select a from Foo a where a._name = ...
代わりにfield.camelcaseデータを使用すると、同じクエリは次のようになります。
select a from Foo a where a.Name...
編集 あなたが「field.camelcase」と書いているのを見ましたが、私の答えは「field.camelcase-underscore」についてです。原則は同じで、私はあなたがポイントを得ると思います;)
'。'の後の部分 はいわゆる命名戦略であり、hbmに書き込む名前がバッキングフィールドと異なる場合に指定する必要があります。あなたの場合、hbmfield.camelcase
に書き込むことが許可されており、NHibernateはクラス内CustomerName
で名前のあるフィールドを探します。customerName
その理由は、NHibernateが準拠する命名規則を選択することを強制しないためです。NHは、ほとんどすべての命名規則で機能します。
NHが値を設定するのにプロパティが適していない場合があります。
彼らはかもしれません
次に、NHがプロパティセッターを呼び出さないようにします。フィールドをマッピングする代わりに、プロパティをマッピングしますが、値の読み取り/書き込み時にフィールドを使用するようにNHに指示します。Rogerは、プロパティのマッピングが良いことである理由を説明しています。