我希望有一个父对象删除自身,并且它是单个transactionscope中的子对象。我还想在两种情况下都检查要删除的对象是否存在,以及用户是否对该对象具有权限。考虑以下代码:
我在服务器上获得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# - C#Transactionscope-在同一事务中插入/选择多个连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10567558/