带有EF Core的AutoMapper-未更改的实体标记为已更改和删除

问题描述 投票:-1回答:1

我对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,但实际的CurrentValueOriginalValue相同。

还有趣的是,由于取消装箱,CurrentValue == OriginalValue返回false,但是CurrentValue.Equals(OriginalValue)返回true。>

此更改及其检测肯定是在Map方法期间引起的。如果我将其注释掉,则管道可以正常工作。尽管数据没有任何实际更改,并且我设置了忽略此属性的映射,但仍会检测到EF Core中的更改。如果我执行“手动映射”并自己将域对象中的值分配给实体对象,问题将消失。但是有很多字段,我想从autoMapper的使用中受益。

我对EF Core 2.0和AutoMapper 8.1.0的组合有一个奇怪的问题。由于提取实际代码的一些有意义的代码片段是非常重要的,因此我将描述结构,...

entity-framework-core automapper automapper-8
1个回答
-1
投票

我仍然不知道到底是什么错,为什么。但是原因是卡在EF Core和AutoMapper之间。问题实际上是在重构期间重命名了其中一个属性。 EF实体模型和AutoMapper映射配置的所有设置均已调整为与重构状态匹配。我也尝试使用MemberList.None选项进行所有映射配置,并手动指定所有内容。也许原因是该属性的名称与其类型(Project)相同。但是其他类似的道具也可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.