首页 > 解决方案 > Asp.Net Core 3.1 在 EFCore 中使用 DDD 模式删除聚合根

问题描述

我尝试为我的应用程序使用 DDD,当创建或编辑聚合根时,我添加了将在我的存储库的 SaveChange 中引发的 DomainEvent。

现在我的问题是删除操作,因为我的实体根具有创建或删除的功能,但删除操作的唯一方法是在存储库上调用删除,就像我在其中一个 CommandHandler 中的代码一样

entity.AddDomainEvent(new NodeRemovedPublicEvent(request.NodeId));
_repository.Delete(entity);
await _repository.UnitOfWork.SaveChangesAsync();

这样,我需要记住每次使用_repository.Delete() 时都要创建一个域事件。我不喜欢这种操作,这种情况有最佳实践吗?

编辑1:(不要'删除永远)。我认为这是最好的方法,以避免删除中的事务问题,ecc ...这样我需要实现逻辑删除。在我的情况下,当根身份被删除(逻辑删除是相同的)时,我需要删除其他实体(逻辑删除)。为此,我需要生成一个域事件。如果我不提出那个事件,我的实体有逻辑删除,而订单实体没有。确实,如果没有该实体,订单实体将无法加载,但我需要知道相关实体已“链接”到逻辑删除的实体。例如,如果我删除了广告用户,并且用户拥有实体 Food,我需要删除分配给该用户的所有 Food 实体。

标签: asp.net-coreentity-framework-coredomain-driven-design

解决方案


我没有足够的声望给你的帖子添加评论,但你应该看看 Udi Dahan 的这篇帖子:不要删除 - 只是不要

我认为您正在寻找的最佳做法是“不删除”任何内容。回到 UL 并讨论实际发生的情况,而不是删除某些内容。我的意思是,在现实世界中,事情不仅仅是“删除”。


推荐阅读