1

我在 ASP.NET MVC 4 中编写了我的代码。我使用 MVC 编辑模板创建了一个编辑表单,这是我POST保存编辑数据的代码。

    [AcceptVerbs(HttpVerbs.Post)]
    [Authorize(Roles = "User")]
    public ActionResult Register(Models.UserBasicProfile profile)
    {
            if (ModelState.IsValid)
            {
                using (Models.SocialServicesDataContainer context = new Models.SocialServicesDataContainer())
                {
                    Models.UserBasicProfile update =
                        context.UserBasicProfiles
                        .SingleOrDefault(c => c.Id == profile.Id);
                    if (update.Id > 0)
                    {
                        profile.RegisterDate = update.RegisterDate;
                        update = profile;
                        context.SaveChanges();
                        return RedirectToRoute("User_ShowProfile_Alter", new {username = User.Identity.Name });
                    }
                    else
                    {
                        return View(profile);
                    }
            }
      }

此代码运行正确,没有错误。但是当重定向到用户配置文件发生时,修改的字段仍然具有以前的值。
我该怎么办 ?

提前致谢。

4

2 回答 2

4

我会说这是因为profile变量没有“连接”到上下文。上下文不知道配置文件对象。因此,当运行context.SaveChanges()配置文件变量中的更改时,不会被注意到。

您需要更新update object with the values from profile. 或者也许将配置文件对象附加到上下文。

查看这篇文章,了解如何在保存实体框架 4 - AddObject vs Attach之前附加到上下文

于 2013-01-08T11:33:53.983 回答
3

看起来您实际上并没有更改从数据库返回的对象中的数据。您正在设置 update = profile,但这只是取消引用更新变量,因此它不再指向 EF 跟踪的对象。

您需要从配置文件中复制所有属性值以进行更新。

于 2013-01-08T11:35:19.847 回答