导航属性未更新
Navigations properties are not updating
出于某种原因,我的编辑操作没有更新我的导航属性
检查代码
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 将转到控制器,但错误仍然相同
如果您查看导航 属性 Endereco
的主键 Id
,您会看到它的值为 Guid.Empty
00000000-0000-0000-0000-000000000000
。
因此,更新该实体将生成一个带有下面 WHERE
子句的 SQL 查询:
WHERE Id = '00000000-0000-0000-0000-000000000000'
当然,您的 table 中不存在带有该空 guid 的行。
您的原始代码使用 AutoMapper 进行映射,因此请确保在调用以下行时正确映射所有属性:
var cliente = Mapper.Map<Clientes>(clienteViewModel);
更新:根据您的评论,您还需要确保导航 属性 状态更改为 EntityState.Modified
(因为更改根实体的状态不影响导航属性)如下所示:
_context.Entry(cliente.Endereco).State = EntityState.Modified;
出于某种原因,我的编辑操作没有更新我的导航属性 检查代码
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 将转到控制器,但错误仍然相同
如果您查看导航 属性 Endereco
的主键 Id
,您会看到它的值为 Guid.Empty
00000000-0000-0000-0000-000000000000
。
因此,更新该实体将生成一个带有下面 WHERE
子句的 SQL 查询:
WHERE Id = '00000000-0000-0000-0000-000000000000'
当然,您的 table 中不存在带有该空 guid 的行。
您的原始代码使用 AutoMapper 进行映射,因此请确保在调用以下行时正确映射所有属性:
var cliente = Mapper.Map<Clientes>(clienteViewModel);
更新:根据您的评论,您还需要确保导航 属性 状态更改为 EntityState.Modified
(因为更改根实体的状态不影响导航属性)如下所示:
_context.Entry(cliente.Endereco).State = EntityState.Modified;