我想有一个父对象删除自己,它是一个事务中的子对象。我也想在两种情况下检查是否存在要删除的对象,以及用户是否有权访问该对象。考虑下面的代码:C#Transactionscope - 插入/选择在同一个事务中,多个连接
我得到服务器上的MSDTC是不可用的异常。无论如何要通过我的服务方法传递连接吗?
请看下面的例子:
//班航班,FlightService,FlightDao //类试点,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();
}
}
}
你能请张贴在异常被抛出的在DAO的代码? – MrJames
我很好奇,为什么这是试图升级到DTC交易。飞行员和航班是在不同的数据库上,还是使用不同的连接字符串?快速修复是在Web服务器上启用DTC,但DTC事务非常昂贵,最好使用本地SQL事务。 –
是的,感谢您的及时回复家伙!我将使用DAO实现和错误编辑原始帖子。 –