【问题标题】:Unable to delete using dbSet - Entity Framework无法使用 dbSet 删除 - 实体框架
【发布时间】:2017-12-18 05:53:55
【问题描述】:

我正在使用 EF6,我正在尝试删除这样的实体:

  public virtual void Delete(TEntity entity)
    {

        DbContext.Configuration.ValidateOnSaveEnabled = false;
        DbContext.ChangeTracker.DetectChanges();

        _dbSet.Remove(entity);
    }

但它给了我这样的错误:

然后我使用了另一种方法:

    DbContext.ChangeTracker.DetectChanges();
        DbContext.Entry(entity).State = EntityState.Deleted;

现在错误类似于:

提前致谢。

【问题讨论】:

    标签: c# wpf entity-framework datacontext dbset


    【解决方案1】:

    您无法删除ObjectStateManager 中不存在的实体。在尝试删除之前尝试附加它;

        public virtual void Delete(TEntity entity)
        {
            DbContext.Configuration.ValidateOnSaveEnabled = false;
            DbContext.ChangeTracker.DetectChanges();
            var entry = DbContext.Entry(entity);
            if (entry.State == EntityState.Detached)
                _dbSet.Attach(entity);
            _dbSet.Remove(entity);
        }
    

    另外,我不知道您是如何获取实体实例的,但如果您要修改或删除它们,请不要使用.AsNoTracking()

    【讨论】:

    • 一个实体对象不能被多个IEntityChangeTracker实例引用
    • 完成了,我实际上发现了我的错误。我将从数据网格中选择的项目直接传递给删除方法。现在在首先获取所选项目然后将其传递给方法之后解决了我的问题。
    【解决方案2】:

    试试这个。

    DbContext.Entry(entity).State = EntityState.Deleted;
    DbContext.SaveChanges();
    

    【讨论】:

    • 需要检查您的 DbContext 启动是否存在 Delete 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2011-06-21
    相关资源
    最近更新 更多