导航属性未更新

时间:2018-06-11 03:07:11

标签: c# entity-framework asp.net-mvc-5.1

由于某些原因,我的编辑操作未更新我的导航属性 检查代码

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

enter image description here

有什么想法吗?

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

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您查看导航属性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;