【发布时间】:2016-08-25 11:33:11
【问题描述】:
我首先在我的 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 并保存聚合根CommunicationPlan,那么 GraphDiff 将创建所有记录并将它们关联到数据库中。
(正如我想要的那样)
问题
当我试图从现有的CommunicationPlan 中删除其中一个CommunicationTopic 时,这个主题会从数据库中删除(根据我的需要),但是与CommunicationTopic 相关的ContributingMembers 不会被删除from database ,只是它们的外键值设置为空,并且它们驻留在数据库中。
当我配置 ContributingMember 的外键使其不接受空值时,我收到以下异常
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
问题如何配置实体以使 GraphDiff 在其父 -CommunicationTopic- 删除时删除 ContributingMembers 记录?
【问题讨论】:
标签: c# entity-framework ef-code-first graphdiff