public ActionResult EditUserAccounts(String mailAccount1, String password1, Boolean isMainAccount1, String mailAccount2, String password2, Boolean isMainAccount2, String mailAccount3, String password3, Boolean isMainAccount3) { ISession session = NHibernateManager.OpenSession(); ITransaction tran = session.BeginTransaction(); try { User sessionUser = (User)Session[AccountController.USER_NAME]; if (sessionUser == null) { throw new GlimpseException("No se encontró el usuario."); } #region Initialize UserView MailAccountViewModel mailAccountView1 = new MailAccountViewModel(); MailAccountViewModel mailAccountView2 = new MailAccountViewModel(); MailAccountViewModel mailAccountView3 = new MailAccountViewModel(); UserViewModel userView = new UserViewModel(); List <MailAccountViewModel> mailAccountsView = new List <MailAccountViewModel>(); mailAccountView1.Address = mailAccount1; mailAccountView1.Password = password1; mailAccountView1.IsMainAccount = isMainAccount1; mailAccountView2.Address = mailAccount2; mailAccountView2.Password = password2; mailAccountView2.IsMainAccount = isMainAccount2; mailAccountView3.Address = mailAccount3; mailAccountView3.Password = password3; mailAccountView3.IsMainAccount = isMainAccount3; mailAccountsView.Add(mailAccountView1); mailAccountsView.Add(mailAccountView2); mailAccountsView.Add(mailAccountView3); userView.Username = sessionUser.Entity.Username; userView.ListMailAccounts = mailAccountsView; userView.FilterInvalidAccounts(); #endregion this.ValidateUserMailAccounts(userView, sessionUser, session); //direcciones de correo y contraseñas List <MailAccount> removedMailAccounts = new List <MailAccount>(); foreach (MailAccount removedMailAccount in sessionUser.mailAccounts .Where(x => !userView.ListMailAccounts.Any(c => c.Address == x.Entity.Address))) { removedMailAccount.Disconnect(); removedMailAccount.Deactivate(session); //saveOrUpdate adentro removedMailAccounts.Add(removedMailAccount); } foreach (MailAccount removedMailAccount in removedMailAccounts) { sessionUser.mailAccounts.Remove(removedMailAccount); } foreach (MailAccountViewModel mailAccountView in userView.ListMailAccounts) { if (sessionUser.mailAccounts.Any(x => x.Entity.Address == mailAccountView.Address)) //si la cuenta ya existia { MailAccount editedMailAccount = sessionUser.mailAccounts.Single(x => x.Entity.Address == mailAccountView.Address); if (!String.IsNullOrEmpty(mailAccountView.Password)) { editedMailAccount.Entity.Password = CryptoHelper.EncryptDefaultKey(mailAccountView); } editedMailAccount.SetUser(sessionUser); editedMailAccount.ConnectLight(); if (mailAccountView.IsMainAccount) { editedMailAccount.SetAsMainAccount(true); } else { editedMailAccount.SetAsMainAccount(false); } editedMailAccount.Activate(session); //saveOrUpdate adentro } else //si la cuenta es nueva { MailAccount newMailAccount = new MailAccount(mailAccountView.Address, CryptoHelper.EncryptDefaultKey(mailAccountView.Password)); newMailAccount.SetUser(sessionUser); if (mailAccountView.IsMainAccount) { newMailAccount.SetAsMainAccount(true); } else { newMailAccount.SetAsMainAccount(false); } newMailAccount.SetOldestMailDate(); newMailAccount.Activate(session); //saveOrUpdate adentro newMailAccount.ConnectFull(session); sessionUser.AddAccount(newMailAccount); } } tran.Commit(); Session[AccountController.USER_NAME] = sessionUser; return(Json(new { success = true, url = Url.Action("Index", "Home") }, JsonRequestBehavior.AllowGet)); } catch (GlimpseException exc) { tran.Rollback(); return(Json(new { success = false, message = exc.GlimpseMessage }, JsonRequestBehavior.AllowGet)); } catch (Exception exc) { tran.Rollback(); Log.LogException(exc, "Parametros: viewAccountName1:(" + mailAccount1 + "), viewAccountPass1( " + password1 + "), viewAccountCheck1(" + isMainAccount1 + "), viewAccountName2(" + mailAccount2 + "), viewAccountPass1(" + password1 + "), viewAccountCheck2(" + isMainAccount2 + "), viewAccountName3:(" + mailAccount3 + "), viewAccountPass3( " + password3 + "), viewAccountCheck3(" + isMainAccount3 + ")."); return(Json(new { success = false, message = "Error modificando usuario." }, JsonRequestBehavior.AllowGet)); } finally { session.Close(); } }