我面临的当前问题是我正在对所有对象实施软删除,但实体上的.Remove()
会在进程中删除外键。
MyObject(ie):
Id = 1
姓名= Blah
PageID = null(在调用.Remove()之前是10,我想在SoftDelete期间保留它)
是否可以覆盖public virtual TEntity Remove(TEntity entity)
?或修改我的ChangeTracker.DetectChanges();
部分?
就像我简要提到的那样,我使用 MVC为我的所有对象创建控制器, ...或者我应该研究一种不同的方法吗? 我可以提供更多详情,请告诉我您的需求。 控制器中的示例: 我的 提前谢谢。 是否像调用以下内容一样简单? 我认为这有效,我知道这可能是另一个数据库调用,但现在解决了。需要进一步测试。ChangeTracker.DetectChanges();
将实体(ObjectStateEntry
)设置回修改版(entry.ChangeState(EntityState.Modified);
)并将另一个属性IsActive
设置为false DeleteConfirm
为db.entityObject.Remove(entity)
。 // POST: MyObject/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(Guid id)
{
MyObject myObject = db.MyObject.Find(id);
db.MyObject.Remove(myObject);
db.SaveChanges();
return RedirectToAction("Index");
}
DbContext
代码的子集:public class AppDbContext : DbContext
{
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
objectContext.ObjectStateManager.GetObjectStateEntries(
EntityState.Added |
EntityState.Modified |
EntityState.Deleted);
foreach (ObjectStateEntry entry in objectStateEntryList)
{
if (!entry.IsRelationship)
{
switch (entry.State)
{
case EntityState.Deleted:
entry.ChangeState(EntityState.Modified);
((BaseObject)entry.Entity).IsActive = false;
//Update #1
this.Entry(entry.Entity).Reload();
//Is is possible to "restore" the original object?
//or override .Remove()?
break;
}
}
}
return base.SaveChanges();
}
}
更新1:
this.Entry(entry.Entity).Reload();