gpt4 book ai didi

c# - 删除父实体而不删除相关子实体

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:52 25 4
gpt4 key购买 nike

您好,我正在使用 Entity Framework 来设置我的数据库。我有一个多关系实体,我只想删除父实体而不进行级联删除。我从 parent 那里删除时遇到错误,但我真的想保留我的 child 作为记录原因。有什么方法可以只删除 parent 而不出错吗?

最佳答案

这是一个老问题,但我今天遇到了这个问题,所以我将分享我找到的解决方案。

长话短说版本是您需要预先加载您的子关联。假设你的关系设置正确并且 Foo 有很多 Bars,这段代码应该完全符合你的要求:

    public void Delete(Guid fooId)
{
using (var context = new MyDbContext())
{
var foo = context.Foos.Include("Bars").FirstOrDefault(foo => foo.Id == fooId);
if (foo != null)
{
context.Foos.Remove(foo);
context.SaveChanges();
}
}
}

这里的关键是调用.Include。否则,更新将因违反外键而失败。

现在,当我说我假设您的关系设置正确时,我的意思是它们应该看起来像这样。

// Foo.cs
public class Foo
{
public Guid Id { get; set; }

public ICollection<Bar> Bars { get; set; }
}

// Bar.cs
public class Bar
{
public Guid Id { get; set; }

public Guid? FooId { get; set; }

public virtual Foo Foo { get; set; }
}

// MyDbContext
modelBuilder.Entity<Foo>()
.HasMany(e => e.Bars)
.WithRequired(e => e.Foo)
.HasForeignKey(e => e.FooId)
.WillCascadeOnDelete(false);

关于c# - 删除父实体而不删除相关子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529901/

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