特別なプロパティを持つドメインクラスを拡張せずにNHibernateを介してエンティティを更新/挿入するときに、いくつかの特別な列値を設定するにはどうすればよいですか?
例:私の場合、オブジェクトを取得し、データベースを更新/挿入する直前に、IInterceptorを使用してそのオブジェクトにいくつかの追加情報(ユーザーIDやコンピューター名など)を追加します。つまり、元のオブジェクトのクラスに新しいプロパティを指定せずに、DBテーブルにいくつかの列を追加したいと思います。その場合、自分Object.hbm.xml
またはApp.configに構成/変更/追加する必要がありますか?
問題は、元のオブジェクトと基本クラスを変更できないことです。したがって、元のオブジェクトを変更せずに(基本クラスから継承していなくても)、可能であればDBテーブルに情報を追加する必要があります。
例:
元のオブジェクトには:FirstName ,LastName,Birthday,Address properties
Customer.hbm.xml
もっている:
<property name="FirstName" column="FirstName" type="string" not-null="true" length="64" />
<property name="LastName" column="LastName" type="string" not-null="true" length="64" />
<property name="Birthday" column="Birthday" type="DateTime" not-null="true" />
<property name="Address" column="Address" type="string" not-null="true" />
私のInterceptorクラスには次のメソッドがあります。
public bool OnSave(object entity, object id, object[] state, string[] propertyNames, NHibernate.Type.IType[] types)
その時点で、または保存する前に、DB Customerテーブルに追加の2つの列(たとえば、コンピューター名とユーザー名)を追加する必要があります。これらの列propertyNames[]
とstate[]
パラメーターには最初からそれらがないため、その場で実行する必要があります。
MY DB Customerテーブルには、上記で説明したすべての列があります。
ありがとうございました。