我对EF Core 2.0和AutoMapper 8.1.0的组合有一个奇怪的问题。
由于提取实际代码的一些有意义的片段将非常简单,我将描述结构,这很简单:
我有一个数据库实体模型(仅POCO)通过EF Core Code First(使用Fluent API定义)映射到DB。除此之外,还有一个领域模型。在这两层之间有AutoMapper配置。当需要将更新的域对象映射到一个简单的实体时,它利用了重载
Mapper.Map(DomainObjectInstance, EntityObjectInstance, DomainType, EntityType);
以更新由EF Core跟踪的实际EntityObjectInstance。
过去效果很好。不幸的是,该模型中进行了一些重构,此后该模型停止与EF Core一起使用。更新一个域对象后,它正在从数据库中删除。
我发现的结果–调用Map
方法后,ChangeTracker
中的DBContext
检测到一个重要外键的更改-这是一个实体,该实体也包含在另一个实体的集合中(通常1-M关系)。但是,如果我检查该属性,则存在IsChanged = true
,但实际的CurrentValue
和OriginalValue
相同。
还有趣的是,由于取消装箱,CurrentValue == OriginalValue
返回false
,但是CurrentValue.Equals(OriginalValue)
返回true
。>
此更改及其检测肯定是在Map
方法期间引起的。如果我将其注释掉,则管道可以正常工作。尽管数据没有任何实际更改,并且我设置了忽略此属性的映射,但仍会检测到EF Core中的更改。如果我执行“手动映射”并自己将域对象中的值分配给实体对象,问题将消失。但是有很多字段,我想从autoMapper的使用中受益。
我对EF Core 2.0和AutoMapper 8.1.0的组合有一个奇怪的问题。由于提取实际代码的一些有意义的代码片段是非常重要的,因此我将描述结构,...
我仍然不知道到底是什么错,为什么。但是原因是卡在EF Core和AutoMapper之间。问题实际上是在重构期间重命名了其中一个属性。 EF实体模型和AutoMapper映射配置的所有设置均已调整为与重构状态匹配。我也尝试使用MemberList.None
选项进行所有映射配置,并手动指定所有内容。也许原因是该属性的名称与其类型(Project
)相同。但是其他类似的道具也可以正常工作。