Entity Framework - 保存数据库更改不起作用
Entity Framework - saving db changes not working
提交表单并传入我的模型(表单)时,我试图将更改保存到我的数据库中。
Forms 模型有一个 PeopleInvolved
对象作为 属性。
模型已成功更新,更改也已成功添加到 peopleInvolved
对象,但是,SaveChanges()
调用未保存任何内容。
.NET Framework 4.5.1 - EF 6.1.1
public class Forms
{
public int Id { get; set; }
public string UserId { get; set; }
public PeopleInvolved PeopleInvolved { get; set; }
}
public async Task<ActionResult> EditForm(Forms model, string returnUrl)
{
ViewData["ReturnUrl"] = returnUrl;
ApplicationUser user = await GetCurrentUserAsync();
if (!ModelState.IsValid)
return RedirectToAction("Index", model);
if (model.PeopleInvolved != null)
{
PeopleInvolved peopleInvolved = _db.PeopleInvolved.Single(x => x.FormId == user.FormId);
peopleInvolved = model.PeopleInvolved;
_db.SaveChanges();
return RedirectToLocal(returnUrl + "?PeopleInvolved?Success");
}
}
您实际上并未更改数据库中的任何内容。
您对数据库的调用返回了一个 PeopleInvolved
对象并将对该对象的引用存储在 peopleInvolved
变量中。然后将该变量更改为对模型对象上 PeopleInvolved
属性 的引用。您永远不会真正更改从数据库调用返回的对象。
简单的解决方案是做类似
的事情
peopleInvolved.Property1 = model.PeopleInvolved.Property1;
peopleInvolved.Property2 = model.PeopleInvolved.Property2;
更新从数据库返回的实际对象。
你可以这样更新。
如果你必须用 user.FormId 覆盖 model.PeopleInvolved.FormId 更新 属性.
db.PeopleInvolved.Attach(model.PeopleInvolved);
db.Entry(model.PeopleInvolved)).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
提交表单并传入我的模型(表单)时,我试图将更改保存到我的数据库中。
Forms 模型有一个 PeopleInvolved
对象作为 属性。
模型已成功更新,更改也已成功添加到 peopleInvolved
对象,但是,SaveChanges()
调用未保存任何内容。
.NET Framework 4.5.1 - EF 6.1.1
public class Forms
{
public int Id { get; set; }
public string UserId { get; set; }
public PeopleInvolved PeopleInvolved { get; set; }
}
public async Task<ActionResult> EditForm(Forms model, string returnUrl)
{
ViewData["ReturnUrl"] = returnUrl;
ApplicationUser user = await GetCurrentUserAsync();
if (!ModelState.IsValid)
return RedirectToAction("Index", model);
if (model.PeopleInvolved != null)
{
PeopleInvolved peopleInvolved = _db.PeopleInvolved.Single(x => x.FormId == user.FormId);
peopleInvolved = model.PeopleInvolved;
_db.SaveChanges();
return RedirectToLocal(returnUrl + "?PeopleInvolved?Success");
}
}
您实际上并未更改数据库中的任何内容。
您对数据库的调用返回了一个 PeopleInvolved
对象并将对该对象的引用存储在 peopleInvolved
变量中。然后将该变量更改为对模型对象上 PeopleInvolved
属性 的引用。您永远不会真正更改从数据库调用返回的对象。
简单的解决方案是做类似
的事情peopleInvolved.Property1 = model.PeopleInvolved.Property1;
peopleInvolved.Property2 = model.PeopleInvolved.Property2;
更新从数据库返回的实际对象。
你可以这样更新。 如果你必须用 user.FormId 覆盖 model.PeopleInvolved.FormId 更新 属性.
db.PeopleInvolved.Attach(model.PeopleInvolved);
db.Entry(model.PeopleInvolved)).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();