いくつかのレガシーコードでバグを修正しようとしています。コードはデータベースからオブジェクト(行)を削除しようとしています。ただし、Sessionにはオブジェクトが含まれていない場合があり、例外がスローされます。セッションにオブジェクトが含まれているかどうかを確認するためのテストを追加してから、セッションにオブジェクトを取得するためにさまざまなことを試してみましたが、それまでは成功していません。他に何を試すことができますか?オブジェクトをセッションにアタッチする
このコードは、ユニットワークの倫理に従わないという点で、nHibernate Sessionを実装していません。アプリケーションは、開始時に1つのセッションを作成し、アプリケーションの存続期間を通してそのセッションを使用します。私はこれについて何もすることができません(完全な書き換え以外は、とにかくnHibernateを放棄します)。
using (ITransaction transaction = this.Session.BeginTransaction())
{
try
{
if (Session.Contains(object))
{
Session.Delete(object);
transaction.Commit();
}
else // new code, Session does not contain object
{
try
{
//Session.Close();
//Session.Dispose();
//Session.Disconnect();
Session.Merge(object);
Session.Save(object); // this does something
Session.Lock(object, LockMode.Upgrade); // .Write in invalid mode
Session.Update(object);
using (ITransaction transaction2 = this.Session.BeginTransaction())
{
// this code executes with no error but does not delete the row from the database
Session.Delete(object);
transaction2.Commit();
}
}
catch (System.Exception exception)
{
string message2 = exception.ToString();
MessageBox.Show(message2, "Delete() Try it again ", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
catch (System.Exception exception)
{
if (transaction != null)
{
transaction.Rollback();
}
throw exception;
}
}
あなたは別の方法で削除しようとすることができます:https://stackoverflow.com/a/25762358/1162077の提案のための –
感謝。これは改善のようです。行を削除し、例外もスローします。あなたが私のコードで独特の何かを感じることはできません。 –