【问题标题】:AutoMapper: int? being mapped to null when there is source has value自动映射器:int?当有源值时被映射为 null
【发布时间】:2013-10-31 09:48:54
【问题描述】:

我创建了以下地图:

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 时是如何更新的

【问题讨论】:

  • 您很可能遗漏了什么。也许EF正在介入并将其设置为NULL?这个要点很好用。 gist.github.com/idursun/7248645
  • 你是对的。当然它必须与EF做一些事情。我尝试使用另一个未映射到实体的可为空属性,它工作正常。我已对我的测试项目做出承诺以反映这一点
  • 尝试刷新问题。两个月后,我的一位同事也遇到了同样的问题,我们找不到问题出在哪里。有什么想法吗?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多