MVC 5更新数据库中一行的多个字段

Sco*_*oit 5 database asp.net-mvc-5

我正在练习MVC 5,在我的应用程序中,我有一个控制器方法,应该更新给定用户配置文件的地址信息.

我通过使用上下文对象访问数据库来做到这一点,我首先想到的是将数据库行复制到对象,进行更改,然后使用该AddOrUpdate()方法将其放回.但是,我只看到一种Add()方法.

所以我做了以下事情:

public ActionResult EditBillingDetails(EditBillingDetailsViewModel model)
{
    if (ModelState.IsValid)
    {
        string id = User.Identity.GetUserId();
        ApplicationDbContext db = new ApplicationDbContext();

        db.Users.Single(u => u.Id == id).FirstName = model.FirstName;
        db.Users.Single(u => u.Id == id).LastName = model.LastName;
        db.Users.Single(u => u.Id == id).Email = model.Email;
        db.Users.Single(u => u.Id == id).Address = model.Address;
        db.Users.Single(u => u.Id == id).City = model.City;
        db.Users.Single(u => u.Id == id).ZIP = model.ZIP;
        db.Users.Single(u => u.Id == id).Country = model.Country;

        db.SaveChanges();

        return RedirectToAction("Manage", new { Message = ManageMessageId.ChangeBillingSuccess });
    }
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好,但是为了逐个查看相同的条目7次只是为了逐个更新每个字段感觉不对.有没有更好的方法来做到这一点?

Tom*_*mmy 4

如果您从数据库中检索实体,它将db.SaveChanges()负责用新值更新实体。EF“跟踪”您从数据库查询的实体(在本例中为对 的调用.Single()),并且知道如果您更改该实体的任何属性,则将更改保留回数据库。如果您要创建一个全新的实体,则只需Add访问数据库。

var user = db.Users.Single(u => u.Id == id);
user.FirstName = model.FirstName;
user.LastName = model.LastName;
user.Email = model.Email;
user.Address = model.Address;
user.City = model.City;
user.ZIP = model.ZIP;
user.Country = model.Country;

db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)