首页 > 解决方案 > 导航属性未更新

问题描述

出于某种原因,我的编辑操作没有更新我的导航属性检查代码

 public ActionResult Edit(ClienteViewModel clienteViewModel)
    {
        if (ModelState.IsValid)
        {
            var cliente = Mapper.Map<Clientes>(clienteViewModel);
            _context.Entry(cliente).State = EntityState.Modified;
            _unitOfWork.Commit();
            return RedirectToAction("Index");
        }
        return View(clienteViewModel);
    }

在此处输入图像描述

有任何想法吗?

编辑我在编辑视图上添加了一个带有 endereco.id 的隐藏字段,现在 Endereco.Id 将进入控制器,但错误仍然相同

在此处输入图像描述

标签: c#entity-frameworkasp.net-mvc-5.1

解决方案


Id如果您查看导航属性的主键,您Endereco会看到它的值是Guid.Empty 00000000-0000-0000-0000-000000000000.

因此,更新该实体将生成一个带有以下WHERE子句的 SQL 查询:

WHERE Id = '00000000-0000-0000-0000-000000000000'

当然,您的表中不存在带有该空 guid 的行。

您的原始代码使用 AutoMapper 进行映射,因此请确保在调用以下行时正确映射所有属性:

var cliente = Mapper.Map<Clientes>(clienteViewModel);

更新:根据您的评论,您还需要确保将导航属性状态更改为EntityState.Modified(因为更改根实体的状态不会影响导航属性),如下所示:

_context.Entry(cliente.Endereco).State = EntityState.Modified;

推荐阅读