c# - 导航属性未更新
问题描述
出于某种原因,我的编辑操作没有更新我的导航属性检查代码
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 将进入控制器,但错误仍然相同
解决方案
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;
推荐阅读
- amazon-web-services - 无法创建容器错误:地址中的冒号过多
- networking - 如何通过 GSM/LTE 模块发送运营商间短信
- java - Spring启动getConversionService返回null
- xaml - 在 xamarin 中按钮的单击事件上加载主 xaml 页面内的列表视图
- sql-server - 从一个表加载的效率与从具有相同结构的两个表加载的效率,以及合并结果。(无索引,MSSQL)
- javascript - selected.js 从已选择的选项中隐藏删除(X),但保留新选项
- java - 这是否比迭代 2D 数组的 2 个 for 循环快,还是相同的速度?
- python - Python KeyboardInterrupt 不适用于 socket.connect
- c# - 新表单是否在与调用表单相同的进程中自动启动?
- codeigniter - 我正在尝试使用 Clickatell 的 php(REST api)跟踪消息的传递状态