MembershipUser不能从数据库中获得更新的结果

 2023-02-17    414  

问题描述

我正在构建一个简单的应用程序,用户可以编辑他们的配置文件,包括添加/删除品牌图像.这似乎是正常工作,并且正在更新数据库没有问题,但是在刷新页面并通过Membership.getUser()检索用户详细信息时,结果包括旧结果而不是来自更新数据库的结果.

这是我的empersialuser getUser覆盖:

MembershipUser不能从数据库中获得更新的结果

public override MembershipUser GetUser(string query, bool userIsOnline)
    {
        if (string.IsNullOrEmpty(query))
            return null;

        var db = (AccountUser)null;

        // ...get data from db
        if (query.Contains("@")){
            db = _repository.GetByQuery(x => x.Email == query).FirstOrDefault();
        }
        else
        {
            string firstName = query;
            string lastName = null;
            if (query.Contains(" "))
            {
                string[] names = query.Split(null);
                firstName = names[0];
                lastName = names[1];
            }

            // ...get data from db
            db = _repository.GetByQuery(x => x.FirstName == firstName && x.LastName == lastName).FirstOrDefault();        }


        if (db == null)
            return null;

        ToMembershipUser user = new ToMembershipUser(
                    "AccountUserMembershipProvider",
                    db.FirstName + " " + db.LastName,
                    db.ID,
                    db.Email,
                    "",
                    "",
                    true,
                    false,
                    TimeStamp.ConvertToDateTime(db.CreatedAt),
                    DateTime.MinValue,
                    DateTime.MinValue,
                    DateTime.MinValue,
                    DateTime.MinValue);

        // Fill additional properties
        user.ID = db.ID;
        user.Email = db.Email;
        user.FirstName = db.FirstName;
        user.LastName = db.LastName;
        user.Password = db.Password;
        user.MediaID = db.MediaID;
        user.Media = db.Media;
        user.Identity = db.Identity;
        user.CreatedAt = db.CreatedAt;
        user.UpdatedAt = db.UpdatedAt;

        return user;
    }

注意我正在使用自定义成员文件provider和empersialuser.这是我呼叫该方法的地方:

public ActionResult Edit()
    {
        ToMembershipUser toUser = Membership.GetUser(User.Identity.Name, true) as ToMembershipUser;

现在,当我在这行代码下直接到数据库时执行单独的查询时,我没有调用隶属度,我得到更新的结果,反过来更新隶属emberhuser结果?!

似乎可能会缓存结果?无论如何,这是什么?我希望这足够清楚.谢谢

编辑:
似乎当我在后台设置一个断点时:

// ...get data from db
            db = _repository.GetByQuery(x => x.FirstName == firstName && x.LastName == lastName).FirstOrDefault();

‘db’检索过时的结果,虽然这肯定是与数据库交谈?如果需要,我会用我的存储库模式更新

推荐答案

我设法找到一个解决方法,尽管我对这个解决方案不满足,所以如果有人可以改进这个请发布.

我决定每次更新图像时手动手动更新empersionUser实例.我的控制器现在看起来像这样:

private static ToMembershipUser MembershipUser { get; set; }

// GET: Dashboard/AccountUsers/Edit
public ActionResult Edit()
{
    if(MembershipUser == null)
        MembershipUser = Membership.GetUser(User.Identity.Name, true) as ToMembershipUser;
}


[HttpPost]
    [ValidateJsonAntiForgeryToken]
    public JsonResult UploadMedia(IEnumerable<HttpPostedFileBase> files, int id)
    {
        var images = new MediaController().Upload(files);

        if (images == null)
        {
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json("File failed to upload.");
        }

        AccountUser accountUser = db.AccountUsers.Find(id);
        db.Entry(accountUser).State = EntityState.Modified;
        accountUser.UpdatedAt = TimeStamp.Now();
        accountUser.MediaID = images[0];
        db.SaveChanges();

        MembershipUser.Media = accountUser.Media;
        MembershipUser.MediaID = accountUser.MediaID;

        return Json(new { result = images[0] });
    }

    [HttpPost]
    [ValidateJsonAntiForgeryToken]
    public JsonResult DeleteMedia(int id)
    {
        bool delete = new MediaController().Delete(id, 1);

        if (!delete)
        {
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json("Error. Could not delete file.");
        }

        MembershipUser.Media = null;
        MembershipUser.MediaID = null;

        return Json("Success");
    }

以上所述是小编给大家介绍的MembershipUser不能从数据库中获得更新的结果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34127.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。