C# Transactionscope - 在同一事务中插入/选择,多个连接

标签 c# transactionscope msdtc

我想让父对象在单个事务范围内删除自身及其子对象。我还想在这两种情况下检查要删除的对象是否存在,以及用户是否有权访问该对象。考虑以下代码:

我收到服务器上的 MSDTC 不可用异常。无论如何通过我的服务方法传递连接?

请看下面的例子:

//类 Flight, FlightService, FlightDao //类 Pilot、PilotService、PilotDao

// FlightService
public void deleteFlight(Flight flight) {
    FlightDao flightDao = new FlightDao();
    Flight existingFlight = flightDao.findById(flight.Id);
    if (existingFlight != null) {
        using (TransactionScope scope = new TransactionScope()) {
            try {
                PilotService.Instance.deletePilot(flight.Pilot);
                flightDao.delete(flight);
            } catch (Exception e) {
                log.Error(e.Message, e);
                throw new ServiceException(e.Message, e);
            }
            scope.Complete();   
        }
    }       
}

// PilotService
public void deleteFlight(Pilot pilot) {
    PilotDao pilotDao = new PilotDao();
    Pilot existingPilot = pilotDao.findById(pilot.Id); // THIS LINE RIGHT HERE THROWS EXCEPTION
    if (existingPilot != null) { 
        using (TransactionScope scope = new TransactionScope()) {
            try {               
                pilotDao.delete(pilot);
            } catch (Exception e) {
                log.Error(e.Message, e);
                throw new ServiceException(e.Message, e);
            }
            scope.Complete();   
        }
    }       
}

最佳答案

您在事务中使用了多个数据上下文层。您需要将一个传递给另一个。 “deletePilot”调用应在同一数据上下文中执行。一种解决方案是让数据访问层的构造函数接受来自另一个数据服务的数据上下文。他们将在相同的上下文中执行操作。

public void deleteFlight(IYourDataContext context, Pilot pilot) {
PilotDao pilotDao = new PilotDao(context);
//do operations now in same context.
...

关于C# Transactionscope - 在同一事务中插入/选择,多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567558/

相关文章:

c# - .Net Core 身份框架通过声明获取用户

c# - 使用 Unicode 字符创建快捷方式

c# - 涉及在进入范围之前创建的 DbTransaction 的 TransactionScope

c# - C# 中的可事务对象?

.net - 用于 Windows Server 事务/错误处理的服务总线 1.0

c# - 减少图像中的色彩深度不会减小文件大小吗?

c# - 无法在异步等待上复制死锁

c# - 我们可以在 asp.net 的事务范围内调用两种不同的方法吗?

.net - SQL Server 和 TransactionScope(带 MSDTC): Sporadically can't get connection

sql-server - 如何在 SQL Server 上启用 MSDTC?