【问题标题】:How do I Cascade a SoftDelete?如何级联 SoftDelete?
【发布时间】:2016-12-24 05:22:16
【问题描述】:

在检查了这些 SO 文章后:cascade-delete-in-entity-frameworkef6-1-soft-delete-with-cascade-deletecascading-soft-deletemethod-for-cascading-soft-deletes-in-parent-child-relationshipsreasons-for-cascading-soft-deletes 并没有找到解决方案...

我让 SoftDelete 为我的实体模型工作。我在我的上下文中覆盖了SaveChanges()

    public override int SaveChanges()
    {
        ChangeTracker.DetectChanges();

        foreach (DbEntityEntry<ISoftDeletable> entity in ChangeTracker.Entries<ISoftDeletable>())
        {
            if (entity.State == EntityState.Deleted)
            {
                entity.State = EntityState.Modified;
                entity.Entity.IsDeleted = true;
            }
        }
        return base.SaveChanges();
    }

我为我的子实体设置了 CascadeOnDelete。因为我覆盖了已删除的EntityState,所以它不会级联。有谁知道只将导航属性放在foreach 循环中的方法?还是处理 SoftDeletes 的更好方法?

提前谢谢你,

【问题讨论】:

  • 我在这个 SO 页面的右侧看到了this link
  • @Maarten 我看到了,但是触发器无法检查记录是否继承了 ISoftDeletable。
  • 您可以在迁移代码中根据 ISoftDeletable 的存在向数据库添加触发器。

标签: c# entity-framework-6 soft-delete


【解决方案1】:

读完这篇 SO 文章entity-framework-6-code-first-cascade-delete...

我意识到,我正在像这样抓取并删除我的实体:

var entity = context.Parent.FirstOrDefault();
context.Parent.Remove(entity);

当我需要像这样抓取整个图表时:

var entity = context.Parent.Include("Children").FirstOrDefault();
context.Parent.Remove(entity);

感谢您的意见@Maarten

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多