2013-01-16 56 views
0

這是我的基地Repository類:實體框架:具有相同鍵的對象已經存在於ObjectStateManager

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; 
    } 
} 

當我想調用刪除方法,它拋出它,我指向的文章標題異常。我不知道我該如何解決這個問題。請注意,對於具有相同錯誤的不同主題的其他答案並不能解決我的問題。

任何意見將是有益的。

+0

什麼'Entities.Local.FirstOrDefault(e => e.Key == entity.Key)'返回? –

+0

它返回'null'。 – saber

+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; 
} 

而且因爲它已經連接它拋出一個錯誤。

+0

兩次附加相同的對象不是問題。 – Slauma

相關問題