表上的EF Core删除违反了表上的外键约束



我有两个表(DevicePropertyValue(,当我试图删除一个Device时,我会得到一个异常:

违反了外键

我也尝试在OnModelCreating()上设置级联,但仍然无法工作。

public class Device
{
public int Id { get; set; }
public List<PropertyValue> Properties { get; set; }
}
public class PropertyValue
{
public int Id { get; set; }
public int? DeviceId { get; set; }
public Device Device { get; set; }
}
modelBuilder.Entity<PropertyValue>()
.HasOne(p => p.Device)
.WithMany(b => b.Properties)
.HasForeignKey(w => w.DeviceId)
.OnDelete(DeleteBehavior.Cascade);  

编辑:我正在使用存储库,但基本上我正在使用_context.Devices.Remove(entity);进行删除

由于FK属性DeviceId可以为null,因此该关系是可选的,默认情况下会关闭删除级联。

因此,添加.OnDelete(DeleteBehavior.Cascade)是朝着正确方向迈出的一步。

但是,如果您最初还没有这样做,并且已经创建了表和关系,那么您必须通过生成新的迁移和更新数据库来确保它也在数据库中应用(因为对于级联删除,EF通常依赖于由数据库实现(。

如果上下文未加载和跟踪Properties集合中的相关实体,则不会删除它们。推荐的方法是对数据库中的外键约束设置级联操作,如DeleteBehavior:的文档中所述

https://learn.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.metadata.deletebehavior

如果您使用EF自动创建模式,这也是将生成的内容。

最新更新