gpt4 book ai didi

c# - Entity Framework - 如何删除链接元素

转载 作者:行者123 更新时间:2023-12-03 22:16:46 24 4
gpt4 key购买 nike

我有以下模型:

enter image description here

我有一个实体空缺对象 (ef_entity),由 DB 提供,它已经有一个链接的交换元素(也由 DB 提供)。我只想删除它:

        if (ef_vacancy.Swaps != null)
ef_vacancy.Swaps.Clear();

当我想执行 SaveChanges 时出现错误:

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.

因此, Entity Framework 尝试将“null”设置为 Swap.VacancyID 表而不是删除记录。但我想删除。如果我尝试执行以下操作:

        var swap_to_delete = (from i in _db.Swaps where i.VacancyID == ID.Value select i).FirstOrDefault();
if (swap_to_delete != null && _db.Entry(swap_to_delete).State != EntityState.Deleted)
_db.Swaps.Remove(swap_to_delete);

它有时有效,有时无效!我不明白为什么它有效,为什么不有效。如何正确完成这个简单的 Action ?

最佳答案

这应该可以回答您的问题: https://stackoverflow.com/a/2058787/1154763

答案的文本(归功于 Craig Stuntz ):

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);
}
}

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

关于c# - Entity Framework - 如何删除链接元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28457458/

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