C# 如何级联SoftDelete?
在检查了这些SO文章之后:、和没有找到解决方案 我的实体模型使用SoftDelete。我已在我的上下文中重写了C# 如何级联SoftDelete?,c#,entity-framework-6,soft-delete,C#,Entity Framework 6,Soft Delete,在检查了这些SO文章之后:、和没有找到解决方案 我的实体模型使用SoftDelete。我已在我的上下文中重写了SaveChanges(): public override int SaveChanges() { ChangeTracker.DetectChanges(); foreach (DbEntityEntry<ISoftDeletable> entity in ChangeTracker.Entries<ISoftDel
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();
}
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
foreach(ChangeTracker.Entries()中的DbEntityEntry实体)
{
if(entity.State==EntityState.Deleted)
{
entity.State=EntityState.Modified;
entity.entity.IsDeleted=true;
}
}
返回base.SaveChanges();
}
我已为我的子实体设置CascadeOnDelete。因为我覆盖了已删除的EntityState
,所以它不会层叠。有人知道一种只将导航属性放入foreach
循环的方法吗?还是处理软删除的更好方法
提前感谢您,阅读本文后 我意识到,我像这样抓取和删除我的实体:
var entity = context.Parent.FirstOrDefault();
context.Parent.Remove(entity);
var entity = context.Parent.Include("Children").FirstOrDefault();
context.Parent.Remove(entity);
当我需要像这样抓取整个图形时:
var entity = context.Parent.FirstOrDefault();
context.Parent.Remove(entity);
var entity = context.Parent.Include("Children").FirstOrDefault();
context.Parent.Remove(entity);
感谢您的输入@Maarten我在本SO页面的右侧看到了。@Maarten我看到了,但触发器无法检查记录是否继承了ISoftDeletable。您可以根据ISoftDeletable的存在,在迁移代码中向数据库添加触发器。