我在我的 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
具有许多CommunicationTopic
s 的ContributingMember
s 并保存聚合 rootCommunicationPlan
时,GraphDiff 将创建所有记录并将它们关联到数据库中。(正如我想要的那样)
问题
当我尝试CommunicationTopic
从现有中删除其中一个CommunicationPlan
主题时,从数据库中删除了该主题(根据我的需要),但是与ContributingMember
该主题相关的 sCommunicationTopic
并未从数据库中删除,只是它们的外键值设置为 null ,并且它们驻留在数据库中。
当我配置的外键ContributingMember
使其不接受空值时,我收到以下异常
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
问题如何配置实体以使 GraphDiffContributingMember
在其父级删除时删除记录CommunicationTopic
?