Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MembershipUser未从数据库获取更新结果_C#_Asp.net_Asp.net Mvc_Asp.net Membership - Fatal编程技术网

C# MembershipUser未从数据库获取更新结果

C# MembershipUser未从数据库获取更新结果,c#,asp.net,asp.net-mvc,asp.net-membership,C#,Asp.net,Asp.net Mvc,Asp.net Membership,我正在构建一个简单的应用程序,用户可以在其中编辑他们的个人资料,包括添加/删除品牌形象。这似乎工作正常,更新数据库没有问题,但是当刷新页面并通过Membership.GetUser()检索用户详细信息时,结果包括旧结果,而不是来自更新数据库的结果 以下是我的会员身份用户GetUser override: public override MembershipUser GetUser(string query, bool userIsOnline) { if (string.

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

以下是我的会员身份用户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。下面是我调用该方法的地方:

public ActionResult Edit()
    {
        ToMembershipUser toUser = Membership.GetUser(User.Identity.Name, true) as ToMembershipUser;
现在,当我在这行代码下直接向数据库执行单独的查询,而不是调用MembershipUser时,我会得到更新的结果,这反过来会更新MembershipUser结果

似乎它可能正在缓存结果?不管怎么说,关于这个?我希望这足够清楚。谢谢

编辑: 当我在以下时间之后设置断点时:

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

“db”检索过时的结果,尽管这肯定是在与数据库对话?如果需要,我将使用我的存储库模式进行更新

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

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

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");
    }
private static ToMembershipUser成员身份用户{get;set;}
//获取:仪表板/帐户用户/编辑
公共行动结果编辑()
{
if(MembershipUser==null)
MembershipUser=MembershipUser的MembershipUser.GetUser(User.Identity.Name,true);
}
[HttpPost]
[ValidateJsonAntiForgeryToken]
public JsonResult UploadMedia(IEnumerable文件,int id)
{
var images=new MediaController().Upload(文件);
如果(图像==null)
{
Response.StatusCode=(int)HttpStatusCode.BadRequest;
返回Json(“文件上传失败”);
}
AccountUser=db.AccountUsers.Find(id);
db.Entry(accountUser.State=EntityState.Modified;
accountUser.UpdatedAt=TimeStamp.Now();
accountUser.MediaID=图像[0];
db.SaveChanges();
MembershipUser.Media=accountUser.Media;
MembershipUser.MediaID=accountUser.MediaID;
返回Json(新的{result=images[0]});
}
[HttpPost]
[ValidateJsonAntiForgeryToken]
public JsonResult DeleteMedia(int-id)
{
bool delete=new MediaController().delete(id,1);
如果(!删除)
{
Response.StatusCode=(int)HttpStatusCode.BadRequest;
返回Json(“错误。无法删除文件。”);
}
MembershipUser.Media=null;
MembershipUser.MediaID=null;
返回Json(“成功”);
}