TransactionScope不在wcf服务方法内回滚,如果直接调用则回滚

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我从我的测试项目中调用DeleteCabinet时,不是wcf调用而是直接方法调用,它可以正常工作.它抛出异常,并且事务被回滚.因此,没有按预期从DB中删除记录

问题是,当我从客户端调用service方法(调用DeleteCabinet)时,抛出异常,但是记录从db中删除.交易不回滚!

似乎调用wcf方法不回滚事务,但它似乎疯了(至少对我来说),有没有人知道为什么会发生这种情况?

提前致谢

luk*_*san 3

您用DevArtDotConnect标签标记了您的帖子...我想知道这是否是 DevArt 提供程序中的错误,而不是 WCF / Entity Framework / System.Transactions 固有的问题。ObjectContext您可以通过查看使用内置 SQL Server 提供程序(甚至最近发布的Oracle 自己的 EF 提供程序)是否会发生这种情况来测试该理论,并查看问题是否仍然出现。这是我唯一能想到的,因为代码似乎 100% 正确。