Я новичок в NHibernate.
Я использую транзакцию для фиксации моих данных. Если произойдет ошибка, я открою новую транзакцию и вставлю данные об ошибке в базу данных. Это не работа.
Пример: я фиксирую mydata
, ошибка1 . Я откат транзакции и начать новую транзакцию, чтобы сохранить журнал ошибок. Когда я фиксирую журнал ошибок в базе данных, он все равно выбрасывает error1 .
Вот мой код:
using (ITransaction transaction = _session.BeginTransaction())
{
try
{
var inserted = _session.Save(mydata);
// first commit
transaction.Commit();
}
catch (Exception ex)
{
// "Cannot insert duplicate key row in object" error occurs.
transaction.Rollback();
using (ITransaction errTransaction = _session.BeginTransaction())
{
try
{
ErrorLogs errorLog = new ErrorLogs();
errorLog.ErrorMessage = ex.Message;
_session.Save(errorLog);
// second commit
errTransaction.Commit(); // it's not work
// When I commit, previous error ("Cannot insert duplicate...") occurs again.
}
catch (Exception ex2)
{
throw ex2;
}
}
throw ex;
}
}
Я использую Sql Profiler для просмотра сгенерированного TSQL. При первом коммите вставка моего оператора данных была выполнена. При втором коммите вставка оператора журнала ошибок была выполнена И вставка моей инструкции данных была выполнена снова.
Пожалуйста, помогите мне объяснить, почему это происходит.