簡體   English   中英

表上的 EF Core 刪除違反表上的外鍵約束

[英]EF Core delete on table violates foreign key constraint on table

我有兩個表( 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);我正在使用_context.Devices.Remove(entity);刪除_context.Devices.Remove(entity);

由於FK屬性DeviceId為空,因此該關系是可選的默認情況下關閉刪除級聯。

因此,添加.OnDelete(DeleteBehavior.Cascade)是正確的方向。

但是如果你最初沒有這樣做並且已經創建了你的表和關系,你必須確保它也在數據庫中應用(因為對於級聯刪除,EF通常依賴於數據庫實現),通過生成新的遷移和更新數據庫。

如果上下文未加載和跟蹤Properties集合中的相關實體,則不會刪除它們。 建議的方法是對數據庫中的外鍵約束設置級聯操作,如DeleteBehavior的文檔中所述:

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

如果使用EF自動創建架構,那么這也將生成。

這條線

public int? DeviceId { get; set; } 

定義屬性名稱DeviceId ,此屬性允許為null。 試着刪除? 從中刪除部分.HasForeignKey(w => w.DeviceId) 它應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM