私はOracleでNHibernateを使用しており、NHibernateにテーブルの主キーの次のシーケンス値の取得を処理させています。以下のコードでは、2 回目の transaction.Commit() の呼び出しで NHibernate にオブジェクトを保存させることができないようです。データベース テーブル ReportSource には、Name 列が "test2" に設定されたレコードが既にあり、Name 列に一意の制約が設定されています。したがって、最初の transaction.Commit() が失敗することを期待しています。しかし、現在データベースにない名前で ReportSource オブジェクトを更新した後、2 番目の transaction.Commit() が失敗するのはなぜですか?
using (var session = Ioc.Container.Get<ISession>())
{
var db = new ReportSource { Name = "test2", ConnectionString = "test", Provider = "test" };
using (var transaction = session.BeginTransaction())
{
try
{
session.SaveOrUpdate(db);
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
}
using (var transaction = session.BeginTransaction())
{
try
{
db.Name = "test4";
//fails with or without the below statement
//session.SaveOrUpdate(db);
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
}
}