删除 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 列设置为空,感谢那些试图提供帮助的人。
我对 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 列设置为空,感谢那些试图提供帮助的人。