我正在尝试通过覆盖该DbContext.SaveChanges()
方法并撤消删除实现我的ISoftDelete
接口的任何实体来在我的项目中实现软删除功能。
interface ISoftDelete
{
bool IsDeleted { get; set; }
}
在该SaveChanges()
方法中,我为处于“已删除”状态并实现的每个条目调用我的 SoftDelete() 方法ISoftDelete
:
var entries = this.ChangeTracker.Entries().Where(x => (x.State == EntityState.Deleted) && x.Entity is ISoftDelete)
.ToList();
entries.ForEach(SoftDelete);
我的SoftDelete()
方法如下:
private void SoftDelete(DbEntityEntry entry)
{
if (entry.State == EntityState.Deleted && entry.Entity is ISoftDelete)
{
entry.Reload();
var entity = (ISoftDelete)entry.Entity;
entity.IsDeleted = true;
entry.State = EntityState.Modified;
}
}
这将完美地工作,直到我遇到一个与其他事物具有一对一关联的实体。此时,将引发异常并出现此错误:
{“来自 'ChildParent' AssociationSet 的关系处于 'Deleted' 状态。给定多重约束,相应的 'Parent' 也必须处于 'Deleted' 状态。”}
有没有办法获取该实体的所有关联并更改它们的已删除状态?
我已经尝试获取对实际关联实体的引用,但实体的EntityState
设置为Unchanged
而不是Deleted
.