gpt4 book ai didi

entity-framework - Entity Framework - 清除子集合

转载 作者:行者123 更新时间:2023-12-03 10:26:51 25 4
gpt4 key购买 nike

我遇到了 Entity Framework 一个有趣的问题,根据我必须用来解决它的代码,我怀疑我的解决方案不太理想。我在表 A 和表 B 之间存在一对多关系,其中表 B 中的实体引用了表 A。我有一个场景,我想同时删除 TableA 中一行的所有子项,我认为这可以通过简单地清除集合来实现:

Entity.Children.Clear()

不幸的是,当我试图保存作为外键违规产生的更改时。

A relationship is being added or deleted from an AssociationSet 'FK_EntityB_EntityA'. With cardinality constraints, a corresponding 'EntityB' must also be added or deleted.



我想出的解决方案是通过实体上下文的 DeleteObject() 手动删除对象,但我只知道我使用的这个逻辑一定是错误的。
while (collection.Any())
Entities.DeleteObject(collection.First());

一方面,我必须使用 Where() 循环这一事实似乎远不理想,但我认为这纯粹是我的语义评估。在任何情况下,我的做法是否有问题,或者是否有更好的方法来清除实体的子实体集合,以便 Entity Framework 正确调用所有已删除对象的数据存储删除?

最佳答案

Clear()删除对实体的引用,而不是实体本身。

如果您希望这始终是相同的操作,您可以处理 AssociationChanged :

Entity.Children.AssociationChanged += 
new CollectionChangeEventHandler(EntityChildrenChanged);
Entity.Children.Clear();

private void EntityChildrenChanged(object sender,
CollectionChangeEventArgs e)
{
// Check for a related reference being removed.
if (e.Action == CollectionChangeAction.Remove)
{
Context.DeleteObject(e.Element);
}
}

您可以使用分部类将其构建到您的实体中。

关于entity-framework - Entity Framework - 清除子集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com