【发布时间】:2016-12-24 05:22:16
【问题描述】:
在检查了这些 SO 文章后:cascade-delete-in-entity-framework、ef6-1-soft-delete-with-cascade-delete、cascading-soft-delete、method-for-cascading-soft-deletes-in-parent-child-relationships 和 reasons-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