C# EF Core-在SaveChanges()之前更新字段/saveChangesSync()
一般来说,我只是在学习EF Core和.NET Core MVC,所以如果这个问题以前被讨论过,我深表歉意-我搜索了StackOverflow和Microsoft文档,但没有找到任何结果 我的模型的简化版本:C# EF Core-在SaveChanges()之前更新字段/saveChangesSync(),c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,一般来说,我只是在学习EF Core和.NET Core MVC,所以如果这个问题以前被讨论过,我深表歉意-我搜索了StackOverflow和Microsoft文档,但没有找到任何结果 我的模型的简化版本: public class MyModel { public int Id { get; set; } public int ParentId { get; set; } public MyModel Parent { get;
public class MyModel
{
public int Id { get; set; }
public int ParentId { get; set; }
public MyModel Parent { get; set; }
public string Type { get; set; }
public string Subtype { get; set; }
}
我的控制器:
public class MyController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit (int? id )
{
if ( id == null ) return NotFound();
var modelToUpdate = await _context.MyModels
.Include( m => m.Parent )
.FirstOrDefaultAsync( m => m.Id == id );
if ( modelToUpdate == null ) return NotFound();
if ( string.IsNullOrWhitespace(modelToUpdate.Type) )
{
modelToUpdate.Type = modelToUpdate.Parent.Type;
}
if ( await TryUpdateModelAsync<MyModel>(
modelToUpdate,
"",
m => m.Id, m => m.ParentId, m => m.Type, m => m.Subtype
)
) {
try
{
await _context.SaveChangesAsync();
}
catch ( DbUpdateException )
{
ModelState.AddModelError( "", "Unable to save changes" );
}
return RedirectToAction("Index");
}
return View(modelToUpdate);
}
}
以及:
_context.Entity(modelToUpdate).Property( m => m.Type ).CurrentValue = modelToUpdate.Type;
和.OriginalValue
,无效
当我在tryupdatemodelsync()
语句上设置断点时,modeltoopdate
正在显示正确的值。\u context.SaveChangesAsync()处的断点代码>改为显示null
看起来tryupdatemodelsync()
正在使用从视图返回的原始值,并在后期处理时完全忽略我在控制器中设置的值
作为补充说明:对于[HttpPost(“Create”)]
,我有类似的逻辑,并且工作完美无瑕——但我在这里使用了以下内容:
if ( ModelState.IsValid )
{
_context.Add(model);
await _context.SaveChangesAsync();
}
有人能解释一下我在这里缺少的关于状态跟踪的内容吗?您的模型。类型是string,它可以返回空字符串而不是null。尝试使用string.IsNullOrEmpty(modelToUpdate.Type)@美国彼得罗索夫发现得很好,编辑于。不幸的是,这没有什么区别。
if ( ModelState.IsValid )
{
_context.Add(model);
await _context.SaveChangesAsync();
}