实体框架 - 当ref完整性停止记录被删除时,将实体标记为非活动状态

时间:2012-03-27 08:19:24

标签: c# entity-framework

我编写了一个简单的方法,如果可能的话应该从数据库中删除一个实体,否则如果有一个完整性规则阻止删除该记录,它应该将该记录标记为非活动。

我的代码是:

    public ActionResult Delete(int id)
    {
        try
        {
            Service.Repository<TEntity>().Delete(id);
            Service.SaveChanges(this.CurrentUser);
            return this.RedirectToActionPermanent("Index");
        }
        catch (DbUpdateException)
        {
            Service.Repository<TEntity>().D

            // Could not delete due to referential integrity so mark as inactive
            var obj = Service.Repository<TEntity>().Find(id);
            obj.Inactive = true;

            // Error thrown here as obj is already marked as deleted
            Service.SaveChanges(this.CurrentUser);

            return this.RedirectToActionPermanent("Index");
        }
    }

我遇到的问题是,当我在DbUpdateException中运行代码然后执行save时,抛出另一个异常,因为该实体仍被标记为“已删除”。从实体中删除原始删除操作的最佳方法是什么,以便我可以再次尝试保存?

  • 编辑 我的意思是说,我看到很多人说我应该处理现有的背景并获得一个新环境。对我而言,在这种情况下,这似乎有点不对,因为我通过Unity在每个Http请求上注入上下文。

由于

1 个答案:

答案 0 :(得分:0)

您可以从数据库刷新实体,然后再次修改它。您必须在您的案例中向您的存储库添加一个方法。

context.Refresh(RefreshMode.StoreWins, object);