データ アクセス層に NHibernate を使用しています。以前にロードしたメモリ内のエンティティがあり、後でデータベースに保存するために変更を加えています。私のアプリケーションが同時にいくつかのマシンで実行されていて、他のユーザーが私がメモリに持っていて保存したいのと同じオブジェクトをデータベースから削除したときに問題が発生します。変更を保存するか、このエンティティを削除しようとすると、StaleStateException が発生しました。
この方法のデータベース呼び出しsession.Get<T>
でエンティティが存在するかどうかを確認します (正常に null を取得します)。
using (var session = NHibernateSessionHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var entity = session.Get<T>(persistObject.Id);
return entity == null ? false : true;
}
}
問題は、エンティティが他のセッション/ユーザーによって削除されたとき (したがって、メモリ内のエンティティが廃止されたとき) と、エンティティが最近作成されて保存できるときとを区別できない場合に発生します。独自の解決策は、エンティティを破棄するか続行時に保存するために、エンティティが既に保存されているかデータベースから読み込まれているかを確認するメカニズムを実装することだと思います。
nhibernate を使用してこの動作を確認する方法はありますか? 試してみましsession.Refresh() and session.Get<T>
たが、オブジェクトが新しく、保存する準備ができているか、廃止されているかはまだわかりません。
大変助かりました。