public UserResponse SaveUser(UserRequest request) { Logger.Info("SaveUser(): Saving user {0}", LocalStore.CurrentUser.UserName); var response = new UserResponse(); User user = request.User; LoginInformation loginInfo = user.LoginInformations; loginInfo.AccessedDate = DateTime.Today; var isUserIdExists = DbContext.Users.Any(x => x.UserId == user.UserId); var isUserNameExists = DbContext.Users.Any(x => x.LoginInformations.Username == user.LoginInformations.Username); var isUserEmailIdExists = DbContext.Users.Any(x => x.Email == user.Email); var isSuperUserExists = request.User.LoginInformations.UserType == UserType.SuperUser; if (user.UserId == 0) { if (isUserIdExists) { Logger.Warn("SaveUser(): User Id {0} already exists", LocalStore.CurrentUser.UserId); response.AddValidationError("UserId", "User Id already exists!"); } else if (isUserNameExists) { Logger.Warn("SaveUser(): Username {0} already exists", LocalStore.CurrentUser.UserName); response.AddValidationError("Username", "User name already exists!"); } else if (isUserEmailIdExists) { Logger.Warn("SaveUser(): Email {0} already exists", LocalStore.CurrentUser.Email); response.AddValidationError("Email", "Email Id already exists!"); } else if (isSuperUserExists) { Logger.Fatal("SaveUser(): System cannot have multiple Superuser"); throw new InvalidOperationException("System cannot have multiple Superuser"); } } else { // LoginInformation is a saparate entity and need query again for finding older values var originalloginInfo = GetOriginalRecord(loginInfo); var originaluser = GetOriginalRecord(user); if (user.LoginInformations.Username != (String)originalloginInfo["Username"] && isUserNameExists) { Logger.Warn("SaveUser(): Username {0} already exists", LocalStore.CurrentUser.UserName); response.AddValidationError("Username", "User name already exists!"); } if (user.Email != (String)originaluser["Email"] && isUserEmailIdExists) { Logger.Warn("SaveUser(): Email {0} already exists", LocalStore.CurrentUser.Email); response.AddValidationError("Email", "Email Id already exists!"); } } if (response.IsValid == false) { return(response); } user.AccessedBy = LocalStore.CurrentUser.UserId; user.AccessedDate = DateTime.Now; if (user.UserId == 0) { DbContext.Users.AddObject(user); } // Save user DbContext.SaveChanges(); Logger.Info("SaveUser(): User {0} Saved", LocalStore.CurrentUser.UserId); return(response); }