Проблема с транзакциями
От: bolikdimon  
Дата: 10.01.08 09:20
Оценка:
Добрый день.
У меня следующая проблема.
Есть DAL класс, наследуемый от DataAccessor, в нем объявлен абстрактный метод:

[SprocName("Projects_Insert")]
public abstract override int Insert(Project project);

Из класса бизнес логики вызываю этот метод, все работает нормально. Но как только пытаюсь поместить его в пределы транзакции он перестает работать.

Делаю следующее — в DAL классе переопределяю метод GetDbManager():

private static DbManager db = new DbManager();
public override DbManager GetDbManager()
{
return db;
}

т.е. теперь он гарантированно возвращает один и тот же экземпляр DbManager.
В классе бизнес логики получаю ссылку на db и заворачиваю все в транзакцию:

DbManager db = DAL.GetDbManager();
db.BeginTransaction();
projectId = DAL.Insert(project);
db.CommitTransaction();

Так вот почему то этот код не работает, т.е. данные не вставляются. При этом в методе Insert используется тот же DbManager что и при открытии и коммите транзакции, т.к. если смотреть выполнение под дебагером, то перед вызовом Insert вызывается переопределенный GetDbManager(). Кроме того если б для Insert использовался другой DbManager, запись вставлялась бы по любому, т.к. вставка была бы не внутри транзакции. Такое чувство возникает, будто абстрактная реализация метода что-то делает с объектом DbManager и транзакция открывается нормально но вот не коммитится.
Если же метод в DAL классе сделать не абстрактным и то все работает.
В чем может быть проблема?

Спасибо.

P.S. Транзакция мне нужна для того чтобы потом добавить еще несколько обращений к БД, т.е. один метод внутри транзакции — это пока для теста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.