【发布时间】:2019-12-12 00:11:47
【问题描述】:
我对 EF Core 2.0 和 AutoMapper 8.1.0 的组合有一个奇怪的问题。
由于从实际代码中提取一些有意义的sn-p非常重要,我将描述结构,这很简单:
我有一个通过 EF Core Code First 映射到 DB 的数据库实体模型(仅限 POCO) - 使用 fluent API 定义。上面有一个域模型。在这两层之间有 AutoMapper 配置。当需要将更新的域对象映射到一个简单的实体时,它会利用重载
Mapper.Map(DomainObjectInstance, EntityObjectInstance, DomainType, EntityType);
更新 EF Core 跟踪的实际 EntityObjectInstance。
它曾经工作得很好。不幸的是,模型中有一些重构,之后它停止与 EF Core 一起工作。更新域对象之一后,它正在从数据库中删除。
我发现 - 在调用 Map 方法后,DBContext 中的 ChangeTracker 检测到其中一个重要外键发生了变化 - 这是一个实体,它也包含在另一个实体的集合中(典型的 1-M 关系)。但是,如果我检查该属性,则有IsChanged = true,但实际的CurrentValue 和OriginalValue 是相同的。
同样有趣的是 CurrentValue == OriginalValue 返回 false 但 CurrentValue.Equals(OriginalValue) 返回 true 因为取消/装箱。
这种变化及其检测肯定是在Map 方法期间引起的。如果我将其注释掉,则管道可以正常工作。尽管数据没有任何实际变化,并且我将此属性的映射设置为忽略,但仍然检测到 EF Core 中的变化。如果我自己进行“手动映射”并将值从域对象分配给实体对象,问题就会消失。但是有很多领域,我想从 autoMapper 的使用中受益。
【问题讨论】:
标签: entity-framework-core automapper automapper-8