gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:35:37 24 4
gpt4 key购买 nike

我现在面临一个让我疯狂几天的问题,希望有人能帮助我。
这里是 ;

我将 EF4 与 oracle 数据库一起使用,使用 dotConnect for oracle from 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)时,抛出异常,但记录已从 db 中删除。事务不回滚!

似乎调用 wcf 方法不会回滚事务,但这似乎很疯狂(至少对我而言),有人知道这可能发生的原因吗?

提前致谢

最佳答案

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

关于oracle - TransactionScope 不会在 wcf 服务方法内回滚,如果直接调用会回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9566703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com