親オブジェクトがそれ自体を削除し、それが単一のトランザクションスコープ内の子オブジェクトになるようにしたい。また、削除するオブジェクトが存在するかどうか、およびユーザーがオブジェクトに対する権限を持っているかどうかを両方の場合に確認したいと思います。次のコードを検討してください。
サーバー上の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();
}
}
}