如何更新在ASP.NET MVC 3中的EF 4实体?

我有2个项目 - 包含EDM实体框架模型和独立的ASP.NET MVC项目的类库。

我在使用MVC编辑和保存对实体的更改方面存在问题。 在我的控制器中我有:

public class UserController : Controller
    {
        public ActionResult Edit(int id)
        {
            var rep = new UserRepository();

            var user = rep.GetById(id);

            return View(user);
        }

        [HttpPost]
        public ActionResult Edit(User user)
        {
            var rep = new UserRepository();

            rep.Update(user);

            return View(user);
        }
    }

我的UserRepository有一个像这样的Update方法:

public void Update(User user)
{
     using (var context = new PDS_FMPEntities())
     {
         context.Users.Attach(testUser);
         context.ObjectStateManager.ChangeObjectState(testUser, EntityState.Modified);
         context.SaveChanges();
     }
}

现在,当我在编辑用户页面上单击“保存”时,参数user只包含填充的两个值:Id和FirstName。 我认为这是由于我只在视图中显示这两个属性。

我的问题是,如果我正在更新用户的名字,然后想保存它,我想要做的是对视图中没有显示的其他User属性做什么,因为他们现在包含0或NULL值user对象?

我一直在阅读很多关于使用存根实体的知识,但是我无法快速完成任务,因为我没有看到任何实际工作的例子。 即我不断收到EntityKey相关的异常。

有人能给我一个很好的教程/例子,说明如何使用由MVC前端调用的存储库类来更新EF 4实体吗?


我会从数据库中检索用户并更新该实体。 英孚不能神奇地知道哪些值应该被修改,哪些不是。

如果您担心并发问题,则需要将时间戳存储在视图中 - 通常将其作为隐藏的表单值。


好的,经过一些试验和错误之后,我希望找到一个解决方案。 这是我在UserRepository更新的Update方法:

public void Update(User user)
{
    using (this.Context)
    {
        var tempUser = new User { usr_id = user.usr_id };

        this.Context.Users.Attach(tempUser);
        this.Context.ApplyCurrentValues("Users", user);
        this.Context.SaveChanges();
    }
}

我尝试过的其他一些例子与上述非常接近,但只是错过了标记。


请看下面的问题我的Update方法:用EF Code First和ASP.NET MVC部分更新对象即使我不喜欢,我也必须指定字段名称,这很好。

链接地址: http://www.djcxy.com/p/4337.html

上一篇: How To Update EF 4 Entity In ASP.NET MVC 3?

下一篇: Mylyn connectors for GitHub and BitBucket