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次只是为了逐个更新每个字段感觉不对.有没有更好的方法来做到这一点?
如果您从数据库中检索实体,它将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)
| 归档时间: |
|
| 查看次数: |
7537 次 |
| 最近记录: |