I need to create a db "task" where all steps have to complete successfully, or the entire thing rolls back. Is this possible?
e.g.
public ActionResult Create()
{
// Get list of current season pass holders
var seasonPasses = db.SeasonPasses;
// Create a new game
var game = new Game { Description = "Next Game", RegistrationOpen = Convert.ToDateTime("09/08/2014"), RegistrationClose = Convert.ToDateTime("09/12/2014") };
db.Games.Add(game);
if (db.SaveChanges() > 0)
{
foreach (var pass in seasonPasses)
{
// Create new reservations for all the season pass holders
var res = new Reservation { Game = game, SpaceNumber = pass.SpaceNumber, User = pass.User };
db.Reservations.Add(res);
}
// If every season pass holder received a new reservation
if (db.SaveChanges() == seasonPasses.Count())
{
// Show success message
return View("SuccessMessage");
}
}
// If ANYTHING fails...
/******************************************
* Roll Everything Back To The Way it Was *
* \/ Then Show Failure Message \/ *
* ****************************************/
return View("FailureMessage");
}