Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Entity framework 实体框架6无法删除实体_Entity Framework - Fatal编程技术网

Entity framework 实体框架6无法删除实体

Entity framework 实体框架6无法删除实体,entity-framework,Entity Framework,我正在尝试删除一个实体 当我打电话时: _dbContext.Set<TEntity>().Remove(entity); \u dbContext.Set().Remove(实体); 我得到一个异常,表示实体不在objectstatemanager中。当我检查数据上下文的内容时,实体在datacontext中。实体如何在datacontext中而不在objectstatemanager中?我已将ProxyCreationEnabled设置为false 编辑1 我尝试了以下方法:

我正在尝试删除一个实体

当我打电话时:

_dbContext.Set<TEntity>().Remove(entity);
\u dbContext.Set().Remove(实体);
我得到一个异常,表示实体不在objectstatemanager中。当我检查数据上下文的内容时,实体在datacontext中。实体如何在datacontext中而不在objectstatemanager中?我已将ProxyCreationEnabled设置为false

编辑1

我尝试了以下方法:

var exists = Set<TEntity>().Any(x => x.Id == entity.Id);
if (!exists)
{
    Set<TEntity>().Attach(entity);
}

exists = Set<TEntity>().Local.Any(x => x.Id == entity.Id);

if (!exists)
{
    GetQuery<TEntity>().Where(x => x.Id == entity.Id).Load();
}

Set<TEntity>().Remove(entity);
var exists=Set().Any(x=>x.Id==entity.Id);
如果(!存在)
{
Set().Attach(实体);
}
exists=Set().Local.Any(x=>x.Id==entity.Id);
如果(!存在)
{
GetQuery().Where(x=>x.Id==entity.Id).Load();
}
Set().删除(实体);

但是,我仍然得到一个例外,对象不在objectStateManager中。

尝试先附加实体

_dbContext.Set<TEntity>().Attach(entity);
_dbContext.Set<TEntity>().Remove(entity);

当我检查数据上下文的内容时,实体在datacontext中。你确定吗?您是如何检查的?通过进入调试器并检查dbContext,查看正确的DbSet集合中的实体以及“本地”集合中的实体。实际上,实体似乎在dbContext中,但不在“本地”集合中。这怎么可能?在编辑中执行代码后,实体看起来也是本地的。此外,当我检查上下文并进入ObjectStateManager并检查_unchangedEntityStore时,我试图删除的实体就在那里。到底发生了什么?@BitFiddler,你能在我的回答中试着执行上面两个代码中的任何一个吗?如果查询不存在,不加载查询
GetQuery()。其中(x=>x.Id==entity.Id).Load()可爱,所以当我删除所有附加代码并尝试将状态更改为“已删除”时,会出现另一个异常:失败,因为相同类型的另一个实体已经具有相同的主键值。世界跆拳道联盟?如果它们具有相同的类型和密钥,EF不应该意识到它们是相同的实体吗?
_dbContext.Entry(entity).State = EntityState.Deleted;