本文介绍了不是的MembershipUser正从数据库中更新结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我建立一个简单的应用程序,用户可以在编辑个人资料,包括添加/删除了品牌形象。这似乎是工作的罚款,并更新数据库中没有任何问题,但是刷新页面时,并通过Membership.GetUser检索用户的详细信息()的结果,包括旧的结果,而不是那些从更新的数据库。

I'm building a simple application where a user can edit their profile including adding/deleting a brand image. This seems to be working fine and is updating the database no problem, however when refreshing the page and retrieving the user details via Membership.GetUser() the result includes the old results and not those from the updated database.

下面是我的MembershipUser的getUser覆盖:

Here is my MembershipUser GetUser override:

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;
    }

请注意我用的是自定义的MembershipProvider和的MembershipUser。这里是我打电话的方法:

Note I am using a custom MembershipProvider and MembershipUser. Here is where I am calling that method:

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

现在,当我做一个单独的查询不到这条线code直到数据库,调用没有的MembershipUser,我得到的结果更新这反过来又更新了结果的MembershipUser?!

Now when I do a separate query just under this line of code straight to the database, not invoking MembershipUser, I get the updated result which in turn updates the MembershipUser result?!

现在看来,这可能会缓存结果?无论如何围绕这吗?我希望这是非常明显的。谢谢

It seems it may be caching the results? Anyway around this? I hope this is clear enough. Thanks

编辑:
看来,当我设置一个断点刚过:

It appears that when I set a breakpoint just after :

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

虽然这肯定是聊到数据库

DB的检索结果已经过时?如果需要的话,我会用我的仓库模式更新

'db' retrieves the outdated results though surely this is talking to the database? If need be I'll update with my repository pattern

推荐答案

我设法找到一个解决办法,虽然我不是很满意这个解决方案,因此,如果任何人都可以在此改善请邮寄。

I managed to find a workaround though I'm not happy with this solution, so if anyone can improve upon this please post.

我决定要手动更新实例的MembershipUser手动每次我更新的形象。我的控制器现在看起来是这样的:

I decided to manually update the MembershipUser instance manually each time I update the image. My controller now looks like this:

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正从数据库中更新结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 01:25