4

フィールドを持つクラスがあります:

    protected DateTime insertDate;

これは、このフィールドのマッピングです:

    <property name="InsertDate" access="field.camelcase" update="false" />

このフィールドは、ctor の場合に設定されます

    public DocuBase(DateTime insertDate)

行がデータベースに追加された場合にのみ永続化されます。プロパティはまったく必要ありません。セッターもゲッターもありません。私はNHibernate 3で働いていました。

そして今、NHiberbate 3 から NHibernate 3.3.1 に移行しました。セッション ファクトリが作成されると、次の例外が発生します。

クラス「XXXX」で、フィールド「insertDate」に関連付けられたプロパティ「InsertDate」が見つかりませんでした

例外を取り除くためにマッピングを変更するにはどうすればよいですか?

編集:以下の回答は完全に正しいです。しかし、プロパティを必要とせず、フィールドのみを持ちたくない場合は、別の解決策があります。

  • name 属性をフィールド名 (私の場合はinsertDate ) に設定し、正しい列名を持つことを忘れないでください

    <property name="insertDate" column="InsertDate" access="field.camelcase" update="false" />
    
4

1 に答える 1

5

大文字と小文字が区別されますが、これで機能します。

<property name="insertDate" column="InsertDate" update="false" />

リリース 3.1.0 では、重大な変更があったようです

NH は現在、以下のコードを受け付けています。これがスローされる方がよいでしょう - パブリック インターフェイスのプロパティ名 (または memberinfo) を使用して、hbm 以外の方法で NH (またはサードパーティ ツール) を構成すると問題が発生します。

[hbm]
<property name="Name" access="field.camelcase" />

[code]
string name;
public virtual string SomeThingCompletelyDifferent{
                                  get {return name;}
                                  set{name=value;}
}

注: これは重大な変更になります。

ps - プライベート セットでプロパティを使用するための参照を削除するように回答を更新しました。

于 2012-11-02T09:19:27.653 に答える