在 c# 中使用 DbContext 删除对象时出错

本文关键字:删除 对象 出错 DbContext | 更新日期: 2023-09-27 18:33:10

>我有这个删除方法:

     public void Delete(DBS.BankAccount entity)
    {
        try
        {
            if (_nahidContext.Entry(entity).State == System.Data.Entity.EntityState.Detached)
            {
                _nahidContext.BankAccounts.Attach(entity);
            }
            _nahidContext.Entry(entity).State = System.Data.Entity.EntityState.Deleted;
            //or
            //_nahidContext.BankAccounts.Remove(entity);
            _nahidContext.SaveChanges();
        }
        catch (Exception ex)
        {
            throw new ArgumentException(ex.Message);
        }
    }

当我单击该删除按钮时,出现此错误:

无法删除该对象,因为在 对象状态管理器。

或者有时会给我以下错误:

实体对象不能由多个实例引用 IEntityChangeTracker.

如何解决此问题并从上下文数据库集中删除对象?[谢谢]

在 c# 中使用 DbContext 删除对象时出错

好吧,您的第二个异常表明实体(或相关实体)附加到另一个上下文(也许您获得BankAcount实体的上下文尚未释放,您应该检查一下)。

我不知道您如何获得实体,但要避免这些异常,您可以尝试以下方法:

var entityToDelete=new BankAccount(){Id=entity.Id};//Create a new instance of BankAccount with only the Id
_nahidContext.BankAccounts.Attach(entityToDelete);
_nahidContext.BankAccounts.Remove(entityToDelete);
_nahidContext.SaveChanges();

或者只是:

var entityToDelete=new BankAccount(){Id=entity.Id};//Create a new instance of BankAccount with only the Id
_nahidContext.Entry(entityToDelete).State = System.Data.Entity.EntityState.Deleted;
_nahidContext.SaveChanges();