首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架代码优先-从表中删除相关项

实体框架代码优先-从表中删除相关项
EN

Stack Overflow用户
提问于 2021-12-15 11:56:58
回答 1查看 50关注 0票数 1

我首先使用实体框架代码。

我有多个类,需要一个审计跟踪(例如汽车,范)。当对该类的实例进行更改时,将更新审计试用版。这些类都是从父类(Vehicle)继承的,它们都使用GUID作为ID。

我的审计跟踪类有一个对这个GUID的引用和一个审计消息。

如何配置域对象,以便在删除汽车时,删除所有相应的审核跟踪项?在域模型中是否存在这样的方法,我是否需要在其他地方配置它,还是应该在每次删除操作之后清理审计跟踪存储库?

代码语言:javascript
复制
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; }
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-15 15:32:57

你有两个选择:

  1. ,您可以保留现有的AuditTrail类,其中VehicleId指向Car或Van等,但没有任何外键约束,因为它可以指向数据库中的多个表(您可能希望记录AuditTrail用于哪个表)。这是整洁的,因为您不会有太多的字段,但这意味着当您删除相应的车辆时,需要编写代码来删除AuditTrails .

  1. 您可以为每个与AuditTrail (CarId、VanId等)相关的表创建一个单独的字段。然后用级联删除规则为每个关系创建一个外键约束,该规则将自动删除带有相应车辆的AuditTrail。这将意味着为您添加的每个新的Vehicle表添加一个新的字段和约束,并在创建AuditTrail时创建处理所有不同类型的代码。

公共汽车:车辆{公共字符串CarProperty { get;set;} public IList AuditTrails { get;set;}公共类车辆{公共Guid { get;set;}= Guid.NewGuid();公共字符串ItemName { get;set;}公共类AuditTrail {公共Guid { get;set;}= Guid.NewGuid();公共字符串AuditNote { get;set;} ForeignKey(nameof(CarId))公共汽车{ get;set;}公共指南?CarId { get;set;}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70363299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档