1

我创建了以下地图:

Mapper.CreateMap<UsuarioViewModel, GEN_USUARIOS>();

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

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

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

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

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

4

1 回答 1

0

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

于 2014-01-09T12:38:46.190 回答