Я хотел бы написать простой класс единицы работы, который будет вести себя следующим образом:
using (var unitOfWork = new UnitOfWork())
{
// Call the data access module and don't worry about transactions.
// Let the Unit of Work open a session, begin a transaction and then commit it.
}
Это то, что у меня есть до сих пор (любые комментарии будут приветствоваться, если вы считаете, что мой дизайн неправильный ):
class UnitOfWork : IDisposable
{
ISession _session;
ITransation _transaction;
.
.
.
void Dispose()
{
_transaction.Commit();
_session.Dispose();
}
}
Я бы хотел откатить транзакцию, если код доступа к данным вызвал какое-то исключение. Итак, метод Dispose ()
будет выглядеть примерно так:
void Dispose()
{
if (Dispose was called because an exception was thrown)
{
_transaction.Commit();
}
else
{
_transaction.RollBack();
}
_session.Dispose();
}
Есть ли в этом смысл? И если да, то как это можно сделать?