Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-当ref integrity停止删除记录时,将实体标记为非活动_C#_Entity Framework - Fatal编程技术网

C# 实体框架-当ref integrity停止删除记录时,将实体标记为非活动

C# 实体框架-当ref integrity停止删除记录时,将实体标记为非活动,c#,entity-framework,C#,Entity Framework,我正在编写一个简单的方法,如果可能的话,它应该从数据库中删除一个实体,否则如果有完整性规则阻止删除记录,它应该将该记录标记为非活动 我的密码是: public ActionResult Delete(int id) { try { Service.Repository<TEntity>().Delete(id); Service.SaveChanges(this.CurrentUser);

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

我的密码是:

    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");
        }
    }
public ActionResult删除(int-id)
{
尝试
{
Service.Repository().Delete(id);
Service.SaveChanges(this.CurrentUser);
返回此.RedirectToActionPermanent(“索引”);
}
捕获(DbUpdateException)
{
Service.Repository().D
//由于引用完整性,无法删除,因此标记为不活动
var obj=Service.Repository().Find(id);
obj.Inactive=true;
//此处引发错误,因为obj已标记为已删除
Service.SaveChanges(this.CurrentUser);
返回此.RedirectToActionPermanent(“索引”);
}
}
我遇到的问题是,当我在DbUpdateException中运行代码,然后执行save时,会引发另一个异常,因为该实体仍然标记为“已删除”。从实体中删除原始删除操作以便再次尝试保存的最佳方法是什么

  • 编辑 我的意思是说,我已经看到很多人说,我应该处理现有的环境,并得到一个新的。在我看来,这在这个上下文中似乎有点错误,因为我通过Unity在每个Http请求上注入上下文

谢谢

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

context.Refresh(RefreshMode.StoreWins, object);