public ActionResult InstallFakeUsers() { //fake users for (int count = 0; count < 30; count++) { using (TransactionScope scope = new TransactionScope()) { membership _m = new membership { email = RandomString(6) + "@" + RandomString(6) + ".com", joined_date = DateTime.Now.AddMonths(-1).AddDays(count), is_approved = "Y", username = "******" + (count + 1).ToString(), password = "******" + (count + 1).ToString() }; db.memberships.Add(_m); db.SaveChanges(); user _u = new user { membership = _m, last_name = RandomString(6), first_name = RandomString(6), gender = Gender.Unspecified.ToString(), about = RandomString(200) }; db.users.Add(_u); db.SaveChanges(); scope.Complete(); } } return RedirectToAction("Index", "User"); }
public ActionResult Register(RegisterModel model) { if (ModelState.IsValid) { try { //start transaction block using (TransactionScope scope = new TransactionScope()) { /* * check if username is already present * in the membership table * SELECT membership_id FROM membership * WHERE username = "******" LIMIT 0,1 */ var isUsernameTaken = (from m in db.memberships where m.username == model.UserName select m.membership_id).SingleOrDefault(); if (isUsernameTaken > 1) { ModelState.AddModelError("", "Username is already taken. Please choose another"); return View(model); } else { /* * CREATE a new record in member with user * provided username,password and email * INSERT INTO membership * (username,password,email,is_approved) * VALUES (?,?,?,?) * * we are skipping email validation for * the demo due lack of time :( * no password hashing for the sake of simplity right now */ var newMember = new membership { username = model.UserName, password = model.Password, email = model.Email, is_approved = "Y", joined_date = DateTime.Now }; db.memberships.Add(newMember); db.SaveChanges(); /* NOW create a user record with the * membership_id of previous insert. INSERT DEFAULT DATA FOR NOW. * INSERT INTO users (gender,membership_id) VALUES (?,?) */ var newUser = new user { gender = Gender.Unspecified.ToString(), membership = newMember }; db.users.Add(newUser); db.SaveChanges(); //everything is OK. Set the username in session Session.Add("LoggedInUser", model.UserName); //transaction complete scope.Complete(); return Redirect(string.Format("/User/{0}/Index", model.UserName)); } } } catch (Exception ex) { //exception occured. transaction scope is incomplete //so no need to rollback. display some generic error ModelState.AddModelError("", "Could not register"); } } // If we got this far, something failed, redisplay form return View(model); }