AutoMapper:int?当源有值时映射到null

时间:2013-10-31 09:48:54

标签: asp.net-mvc entity-framework automapper automapper-3

我创建了以下地图:

Mapper.CreateMap<UsuarioViewModel, GEN_USUARIOS>();

在这个Map中,有一些属性是'int?' (可以为空的外键),例如IDSUPERVISOR。

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

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

这是一个错误还是有些东西我不见了?

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

时更新为null

1 个答案:

答案 0 :(得分:0)

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