实体框架:ObjectStateManager中已存在具有相同密钥的对象

时间:2013-01-16 15:09:28

标签: c# .net entity-framework ef-code-first

这是我的基础Repository类:

public class RepositoryBase<TEntity> : IRepository<TEntity> where TEntity : EntityBase
{
    protected RepositoryBase(DbContext dbContext)
    {
        DbContext = dbContext;
        DbContext.Configuration.LazyLoadingEnabled = false;
        Entities = DbContext.Set<TEntity>();
    }
    public IDbSet<TEntity> Entities { get; set; }    
    ...
    ...
    ...

    public TEntity DeleteOne(TEntity entity)
    {
        DbContext.Entry(entity).State = EntityState.Deleted;
        Entities.Remove(entity);
        DbContext.SaveChanges();
        return entity;
    }
}

当我想调用delete方法时,它会抛出一个异常,我指向帖子标题。我不知道如何解决这个问题。请注意,对于具有相同错误的不同主题的其他答案并未解决我的问题。

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

删除该行:

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

那是试图附加该实体的第二个副本。这是以下的捷径:

DbContext.Attach(entity);
DbContext.Remove(entity);

所以你的代码真的是:

public TEntity DeleteOne(TEntity entity)
{
    DbContext.Attach(entity);
    DbContext.Remove(entity);
    Entities.Remove(entity);
    DbContext.SaveChanges();
    return entity;
}

因为它已经附加了它会引发错误。

相关问题