使用 GraphDiff 删除拥有的实体 2 级深度

Delete Owned Entities 2 level depth using GraphDiff

我在我的 MVC 项目中首先使用 Entity Framework 代码(版本 6)和 GraphDiff。

这里是一些映射数据库中一些表的实体。

public class CommunicationPlan 
{
    public int CommunicationPlanID { get; private set; }

    [Owned]
    public List<CommunicationTopic> Topics { get; private set; }
}

public class CommunicationTopic 
{
    public int CommunicationTopicID { get; private set; }

    [Owned]
    public List<ContributingMember> Members { get; private set; }
}

public class ContributingMember
{
    public int ContributingMemberID { get; private set; }

    // other simple properties
}

当我创建 CommunicationPlan 其中有许多 CommunicationTopic 和它们的 ContributingMember 并保存聚合根 CommunicationPlan 时,GraphDiff 将创建所有记录和在数据库中关联它们。 (正是我想要的)

问题
当我尝试从现有 CommunicationPlan 中删除 CommunicationTopic 之一时,该主题将从数据库中删除(根据我的需要),但是 ContributingMember 相关的CommunicationTopic 没有从数据库中删除,只是它们的外键值设置为空,并且它们驻留在数据库中。

当我配置 ContributingMember 的外键使其不接受空值时,我收到以下异常

The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.

问题 我如何配置实体使 GraphDiff 在其父级 -CommunicationTopic- 删除时删除 ContributingMembers 记录?

我想你可能有两种方法来解决这个问题

  1. 尝试将 CommunicationTopic 和 ContributingMember 之间的数据库关系的级联 属性 配置为 CASCADE DELETE
  2. 确保在尝试删除时加载了 AggregateRoot 的整个图表