1

我在我的 MVC 项目中首先使用实体​​框架代码(版本 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具有许多CommunicationTopics 的ContributingMembers 并保存聚合 rootCommunicationPlan时,GraphDiff 将创建所有记录并将它们关联到数据库中。(正如我想要的那样)

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

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

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

问题如何配置实体以使 GraphDiffContributingMember在其父级删除时删除记录CommunicationTopic

4

1 回答 1

1

我认为您可能有两种方法可以解决此问题

  1. 尝试将数据库中关系的级联属性配置为 CommunicationTopic 和 ContributingMember 之间的 CASCADE DELETE
  2. 确保在您尝试删除 AggregateRoot 时加载它的整个图
于 2016-08-27T08:56:02.403 回答