我将 NHibernate 与 Oracle 一起使用,我让 NHibernate 处理获取表主键的下一个序列值。在下面的代码中,我似乎无法让 NHibernate 在第二次调用 transaction.Commit() 时保存我的对象。数据库表 ReportSource 已经有一条记录,其中 Name 列设置为“test2”,并且我在 Name 列上设置了唯一约束。所以我希望第一个 transaction.Commit() 失败。但是,为什么在我使用当前不在数据库中的名称更新 ReportSource 对象后,第二个 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();
}
}
}