使用 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
- 删除时删除 ContributingMember
s 记录?
我想你可能有两种方法来解决这个问题
- 尝试将 CommunicationTopic 和 ContributingMember 之间的数据库关系的级联 属性 配置为 CASCADE DELETE
- 确保在尝试删除时加载了 AggregateRoot 的整个图表
我在我的 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
- 删除时删除 ContributingMember
s 记录?
我想你可能有两种方法来解决这个问题
- 尝试将 CommunicationTopic 和 ContributingMember 之间的数据库关系的级联 属性 配置为 CASCADE DELETE
- 确保在尝试删除时加载了 AggregateRoot 的整个图表