ray*_*ck2 7 oracle transactionscope rollback devart dotconnect
我正面临着一个让我疯狂几天的问题,希望有人可以帮助我.这里是 ;
我正在使用EF4和oracle数据库,使用dotConnect从devart作为提供者的oracle.我有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调用而是直接方法调用,它可以正常工作.它抛出异常,并且事务被回滚.因此,没有按预期从DB中删除记录
问题是,当我从客户端调用service方法(调用DeleteCabinet)时,抛出异常,但是记录从db中删除.交易不回滚!
似乎调用wcf方法不回滚事务,但它似乎疯了(至少对我来说),有没有人知道为什么会发生这种情况?
提前致谢
您用DevArt和DotConnect标签标记了您的帖子...我想知道这是否是 DevArt 提供程序中的错误,而不是 WCF / Entity Framework / System.Transactions 固有的问题。ObjectContext您可以通过查看使用内置 SQL Server 提供程序(甚至最近发布的Oracle 自己的 EF 提供程序)是否会发生这种情况来测试该理论,并查看问题是否仍然出现。这是我唯一能想到的,因为代码似乎 100% 正确。
| 归档时间: | 
 | 
| 查看次数: | 1693 次 | 
| 最近记录: |