簡単な方法は、session.Refresh(エンティティ)を実行することですが、これにより余分なクエリが発生します。
インターセプタでは機能しますが、非常に重いようです。
http://www.nhforge.org/doc/nh/en/index.html#objectstate-interceptors(11.1)
あなたは何かしたいと思います:
public override bool OnFlushDirty(object entity,
object id,
object[] currentState,
object[] previousState,
string[] propertyNames,
IType[] types)
{
if(entity is DomainObjectICareAbout)
for (int i=0; i < propertyNames.Length; i++) {
if (currentState[i] is DateTime) {
DateTime dt = (DateTime)currentState[i];
dt = dt.AddMilliseconds(-1 * dt.Millisecond);
return true;
}
}
}
return false;
}
のOnSave(のためのものと同じ種類のを)。
カスタムIUserTypeでこれを行う方がいいかもしれませんが、ユーザーの種類によってはこれを行う可能性がわかりません。
IUserTypeのためのように:
public void NullSafeSet(System.Data.IDbCommand cmd, object value, int index)
{
DateTime dt = (DateTime)value;
dt = dt.AddMilliseconds(-1 * dt.Millisecond);
NHibernateUtil.DateTime.NullSafeSet(cmd, dt, index);
}
私は知らんよ...私は最良の答えはわかりません。ちょうどアイデアを与える。より良い方法があるかもしれません!
私はsession.Refreshを使用するつもりだと思います。これは既に役に立つと判明しています。接続文字列に文字セットを設定していないことが分かりましたので、Unicode文字を失ってしまいました。 – Andrew
Yah、あなたの質問(同じセッションを維持することについて)を読んで、Session.Refresh()のように見えるのは正解です。 – anonymous