Entity framework core 使用EF Core和AutoMapper.Collections更新实体时出现问题

Entity framework core 使用EF Core和AutoMapper.Collections更新实体时出现问题,entity-framework-core,domain-driven-design,automapper-collections-ef-core,Entity Framework Core,Domain Driven Design,Automapper Collections Ef Core,假设我在数据库层中有一个princial实体CollectionEntity和一个dependent实体ItemEntity。我也有相应的集合和项目域模型。我正在使用EFCore3.1和AutoMapper.Collections从域映射到实体Collection域模型也是Item模型的聚合根和CRUD操作,仅根据DDD聚合标准执行Collection。使用Id属性执行域和实体之间的相等性比较 当我尝试将Item1从Collection1更改为Collection2时,问题就出现了。我尝试了两种

假设我在数据库层中有一个princial实体
CollectionEntity
和一个dependent实体
ItemEntity
。我也有相应的
集合
项目
域模型。我正在使用EFCore3.1和AutoMapper.Collections从域映射到实体
Collection
域模型也是
Item
模型的聚合根和CRUD操作,仅根据DDD聚合标准执行
Collection
。使用
Id
属性执行域和实体之间的相等性比较

当我尝试将Item1Collection1更改为Collection2时,问题就出现了。我尝试了两种方法:

  • 仅更新集合2- 如果我只是尝试将Item1添加到Collection2并将其持久化,那么它将失败,因为itementy1已经存在于数据库中,并且与CollectionEntity1相关。如上所述,它是通过它的ID来识别的

  • Collection1中删除Item1,然后将其添加到Collection2- 首先,我将其从集合1中删除,映射并保存更改。这将有效地导致从数据库中删除ItemEntity1。然后我将Item1添加到Collection2,并尝试将其映射并持久化到CollectionEntity2。在这种情况下,EF失败,因为它正在尝试更新刚刚删除的ItemEntity1(发生这种情况是因为映射ItemEntity1具有原始ID后,EF会尝试更新)。一种可能的解决方案是在尝试第二次持久化操作之前将Item1的ID设置为
    0
    ,但是这不是理想的结果,因为对itementy1的引用可能会被破坏,或者依赖实体最终会被意外删除

  • 我正在努力解决这个问题,这是由所描述的领域模型结构引起的,我现在有一种感觉,我已经引入了主要的设计缺陷。有什么想法吗