删除 child 记录时如何将外键值设置为 Null EF Core

How to set foreign key value to Null when deleting a child record EF Core

我对 Entity Framework 很陌生,我有一个 API 可以从 SQL 服务器数据库中删除记录,我有 child tableResidenceType并且可以使用ID删除一行,我有parenttablePropertyGroups外键ResidenceTypeId。当我删除 ResidenceType 中链接的行时,有没有办法将外键的值设置为 NULL

所以我需要的行为是,如果我从 ResidenceType table 中删除 ID 1,我需要 EF Core 将 PropertyGroups 中的 ResidenceTypeId 列设置为NULL(或为空)。我已经尝试在我的 DataContext class 中重写 OnModelCreating 方法但运气不佳,任何建议或帮助将不胜感激。

在 Dbcontext class 中设置 OnDelete

modelBuilder.Entity<Land>()
            .HasOne(l => l.Building)
            .WithMany(b => b.Lands)
            .HasForeignKey(l => l.BuildingId)
            .OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.SetNull);

首先,如果尚未确定,FK_PropertyGroups_ResidenceTypes_ResidenceTypeId 允许 NULL,然后在删除 ResidenceType 时,您只需要发布更新,在 SaveChanges 之前,您可以为每个 PropertyGroup 更新值FK 为 null...我认为这会起作用...但是您是否在寻找解决方案如何进行更改或如何允许该行为,因此确保 FK 允许空值,在这种情况下,以前的解决方案就是答案.

事实证明我已经正确设置了所有内容我只需要在删除方法中添加 Include 子句。

var residenceType = await _context.ResidenceTypes.Include(p => p.PropertyGroups).FirstOrDefaultAsync(i => i.PropertyGroupName == name);

添加这个会将相关的 Id 列设置为空,感谢那些试图提供帮助的人。