自动映射器:int?当有源时映射到 null 具有值



我创建了以下地图:

Mapper.CreateMap<UsuarioViewModel, GEN_USUARIOS>();

在此地图中,有一些属性是"int?(可为空的外键),例如 IDSUPERVISOR。

为了应用映射,我使用以下句子:

Mapper.Map<UsuarioViewModel, GEN_USUARIOS>(usuarioVM, usuario);
  • 如果源具有值 (5) 而目标没有值 (null),则该值将应用于目标 (5)。
  • 如果源具有值 (6
  • ),而目标具有另一个值 (5),则该值将正确应用于目标 (6)。
  • 但是,如果两者都具有相同的值(不修改值),则目标中的属性将映射到 NULL,这是错误的!

这是一个错误还是我错过了什么?

编辑:我已经能够在一个简单的项目中隔离问题。我在GitHub上创建了一个存储库:https://github.com/farlop/TestAutomapper。它包括用于创建数据库架构和示例数据的代码和 SQL 脚本。要测试它,只需编辑在IDSUPERVISOR列中具有值的记录,然后保存而不更改任何数据。您可以看到该值如何在不应该更新时更新为 null

如此处所述,问题在于还有一个导航属性也被映射。由于源对象具有具有 null 值的此属性,因此将覆盖目标对象的导航属性。因此,在将更改保存到数据库时,EF 使用空值更新外键属性。

相关内容

  • 没有找到相关文章

最新更新