我有一个ASP.NET MVC 5应用程序,该应用程序将实体框架与存储库和工作单元模式结合使用。现在,我想使用TryUpdateModel()
方法仅更新实际上已更改的任何给定模型的属性。
下面的示例演示了我的方法,但是我发现数据库中的值从未更改。
模型 (Release.cs)
public class Release : BaseModel
{
public int ID { get; set; }
[Required(ErrorMessage = "Enter a name")]
public string Name { get; set; }
[Required(ErrorMessage = "Enter a description")]
public string Description { get; set; }
}
控制器 (ReleasesController.cs)
// POST: Releases/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(Release release)
{
if (!ModelState.IsValid)
return await Edit(release.ID);
TryUpdateModel(await _unit.Releases.GetAsync(release.ID));
await _unit.SaveAsync();
return RedirectToAction("Edit", "Releases", new { id = release.ID });
}
但是,当我专门更新每个属性而不是调用TryUpdateModel()
时,所做的更改将保存到数据库中。
var currentRelease = await _unit.Releases.GetAsync(release.ID);
currentRelease.Name = release.Name;
currentRelease.Description = release.Description;