在提交事务之前如何更新数据库中的字段?

时间:2014-04-01 20:38:54

标签: c# asp.net-mvc

我正在使用密码更改方法,此视图由许多条件之一强制执行。第一个条件是数据库中的LastLoggedin字段是否为空。我在测试数据库中将此字段设置为null以强制密码更改事件。

我已经编写了一个在执行某些测试后更改密码的方法,但我无法通过第一个测试,因为click事件调用的控制器方法将用户返回到登录方法,该方法依次检查LastLoggedin数据库中的字段仍为空,因为我还没有登录。我尝试使用以下代码从我的更改密码方法中更改该值:

        public bool SavePassword(UserModel user, PasswordRecoveryModel password)
    {
        try
        {
            string newPass = password.PasswordNew;
            string newHash = PasswordManager.EncryptPassword(newPass);

            User domainObject = UnitOfWork.UserRepository.GetItem(user.EntityId);
            bool hasUsedPassword = UnitOfWork.UserRepository.HasHadPassword(domainObject, newHash, DateTime.Now.AddMonths(-6));

            if (hasUsedPassword.Equals(true))
            {
                return true;
            }

            User lastLogged = UnitOfWork.UserRepository.GetItem(user.EntityId);
            lastLogged.LastLoggedIn = DateTime.Now;
            lastLogged.VerifiedOn = DateTime.Now;
            UnitOfWork.UserRepository.Update(lastLogged);

            lastLogged.VerifiedOn.Equals(DateTime.Now);
            lastLogged.LastLoggedIn.Equals(DateTime.Now);
            user.Password = newHash;
            user = SaveModel(UnitOfWork.UserRepository,
                                          user,
                                         Mapper.User.ModelToDomain,
                                         Mapper.User.DomainToUserModel);

            CommitTransaction();
            return false;
        }
        catch (Exception ex)
        {
            OnServiceException(ex);
            throw;
        }


    }

但是我仍然没有得到除数据库中保存的新密码以外的任何内容,我通过对用户名运行查询来验证这一点。如何更新此字段,以便我可以通过此测试获得密码更改,甚至可以接受这样做?在我们的旧产品中,它以非常复杂的方式完成,创建一个临时用户对象ant,使用它来通过测试并进行下一个测试。我正在努力简化这个过程。

我是MVC新手,一般编程任何帮助都会受到赞赏。

编辑发现我的问题,像往常一样思考问题,这里是更新的代码:

                if (hasUsedPassword.Equals(true))
            {
                return false;
            }

            user.LastLoggedIn = DateTime.Now.ToString();
            user.Password = newHash;
            user = SaveModel(UnitOfWork.UserRepository,
                                          user,
                                         Mapper.User.ModelToDomain,
                                         Mapper.User.DomainToUserModel);

            CommitTransaction();
            return true;

0 个答案:

没有答案