0

これは私の基本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 メソッドを呼び出すと、投稿タイトルで指摘している例外がスローされます。どうすればこの問題を解決できるかわかりません。同じエラーが発生したさまざまなトピックに関する他の回答は、私の問題を解決しなかったことに注意してください。

どんなアドバイスも役に立ちます。

4

1 に答える 1

0

次の行を削除します。

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

エンティティの 2 番目のコピーを添付しようとしています。これは次のショートカットです。

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

したがって、あなたのコードは実際には次のとおりです。

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

すでにアタッチされているため、エラーがスローされます。

于 2013-01-16T16:59:37.407 に答える