Я столкнулся с проблемой, которая сводит меня с ума на пару дней в надежде, что кто-то может мне помочь.Вот оно;
Я использую EF4 с базой данных oracle, используя dotConnect для oracle из devart в качестве провайдера.У меня есть метод службы wcf, который вызывает метод DeleteCabinet ниже;
public void DeleteCabinet(string pRID)
{
using(TransactionScope tranScope = new TransactionScope())
{
DBUtils.DeleteCabinetAndShelves(pRecordId);
//throw exception to test record not deleted
throw new Exception("xxx something has happened test xxx");
tranScope.Complete();
}
}
DBUtils.DeleteCabinetAndShelves выглядит следующим образом:
public void DeleteCabinetAndShelves(string pRecordId)
{
using(var context = new EdrmEntities())
{
var cabinet = context.Cabinets.Include("Shelves").Single(p => p.RID == pCabinetRID);
//mark all cabinet shelves for deletion
if (cabinet.Shelves != null)
{
foreach (var tempShelf in cabinet.Shelves.ToList())
{
context.DeleteObject(tempShelf);
}
}
//mark cabinet for deletion
context.DeleteObject(cabinet);
//save
context.SaveChanges();
}
}
, когда я вызываю DeleteCabinet из моего тестового проекта, а не вызов wcfно прямой вызов метода работает нормально.Выдает исключение, и транзакция откатывается.Таким образом, ни одна запись не удаляется из БД, как ожидалось
Проблема заключается в том, что когда я вызываю сервисный метод (который вызывает DeleteCabinet) из клиента, генерируется исключение, но запись удаляется из БД.Транзакция не откатывается!
похоже, что вызов метода wcf не откатывает транзакцию, но это кажется сумасшедшим (по крайней мере, мне), кто-нибудь знает причину, по которой это может происходить?
Заранее спасибо