簡體   English   中英

Entity Framework Code First - 從表中刪除相關項

[英]Entity Framework Code First - Delete related items from a table

我首先使用實體框架代碼。

我有多個需要審計跟蹤的類(例如 Car、Van)。 當對此 class 的實例進行更改時,將更新審計試驗。 這些類都繼承自父級(車輛),並且都使用 GUID 作為 ID。

我的審計跟蹤 class 引用了此 GUID 和審計消息。

如何配置我的域對象,以便在刪除 Car 時刪除所有相應的 Audit Trail 項目? 有沒有辦法在域 model 中執行此操作,我是否需要在其他地方進行配置,還是應該在每次刪除操作后清理 Audit Trail 存儲庫?

public class Car : Vehicle
{
    public string CarProperty { get; set; }
}

public class Vehicle
{
    public Guid Id { get; set; } = Guid.NewGuid();
    public string ItemName { get; set; }
}

public class AuditTrail
{
    public Guid Id { get; set; } = Guid.NewGuid();

    public string AuditNote { get; set; }

    public Guid VehicleId { get; set; }
}

你有兩個選擇:

  1. 您可以保留現有的 AuditTrail class ,其中 VehicleId 指向汽車或貨車等,但沒有任何外鍵約束,因為它將能夠指向數據庫中的多個表(您可能想要記錄哪個表 AuditTrail是為了)。 這很整潔,因為您不會有太多字段,但這意味着您需要編寫代碼來刪除相應的 Vehicle 時的 AuditTrails。

  2. 您可以為與 AuditTrail(CarId、VanId 等)相關的每個表創建一個單獨的字段,然后使用級聯刪除規則為每個關系創建一個外鍵約束,該規則將自動刪除具有相應車輛的 AuditTrail。 這意味着為您添加的每個新車輛表添加一個新字段和約束,並創建代碼以在創建 AuditTrail 時處理所有不同類型。

     public class Car: Vehicle { public string CarProperty { get; set; } public IList<AuditTrail> AuditTrails { get; set; } } public class Vehicle { public Guid Id { get; set; } = Guid.NewGuid(); public string ItemName { get; set; } } public class AuditTrail { public Guid Id { get; set; } = Guid.NewGuid(); public string AuditNote { get; set; } [ForeignKey(nameof(CarId))] public Car Car { get; set; } public Guid? CarId { get; set; } }

暫無
暫無

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

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