public ActionResult Create(NewPoll poll) { if (_isUserLoggedIn() == false) { return(_redirectToLogin()); } if (ModelState.IsValid) { long imageId = _db.NextPollImageId(); long pollId = _db.NextPollId(); long choiceId = _db.NextPollChoiceId(); using (var tran = _db.Database.BeginTransaction()) { try{ if (poll.HasImage()) { PollImages pi = poll.Image.ToPollImages(imageId, _userId); _db.PollImages.Add(pi); _db.SaveChanges(); poll.Image.ImageId = imageId; imageId++; } Polls pollEntity = poll.ToPolls(pollId, _userId); _db.Polls.Add(pollEntity); _db.SaveChanges(); // polls choices - images foreach (PollChoice cho in poll.Choices) { if (cho.HasImage()) { PollImages img = cho.Image.ToPollImages(imageId, _userId); // poll choices shell not use full image data - only the thumbs // save space! img.ImgData = ""; img.ImgHeight = 0; img.ImgWidth = 0; _db.PollImages.Add(img); cho.Image.ImageId = imageId; imageId++; } } _db.SaveChanges(); long chordinal = 1; // poll choices foreach (PollChoice cho in poll.Choices) { PollChoices pocho = cho.ToPollChoices(choiceId, pollId, chordinal); _db.PollChoices.Add(pocho); choiceId++; chordinal++; } _db.SaveChanges(); tran.Commit(); } catch (Exception ex) { tran.Rollback(); return(Content(ex.Message)); } } return(Content("ok")); } return(Content(_buildErrorMessage())); }