繁体   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