Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF Core-在SaveChanges()之前更新字段/saveChangesSync()_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# EF Core-在SaveChanges()之前更新字段/saveChangesSync()

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;

一般来说,我只是在学习EF Core和.NET Core MVC,所以如果这个问题以前被讨论过,我深表歉意-我搜索了StackOverflow和Microsoft文档,但没有找到任何结果

我的模型的简化版本:

    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();
    }