2014-09-28 35 views
1

我找到了一個存儲庫模式實現。 Generic Repository的Delete()方法的這個實現是否正確?實現存儲庫模式的刪除方法

public virtual void Delete(T entity) 
{ 
    DBEntityEntry entry = this.DbContext.Entry(entity); 

    if (entry != EntityState.Deleted) 
    { 
     entry.State = EntityState.Deleted; 
    } 
    else 
    { 
     this.DbSet.Attach(entity); 
     this.DbSet.Remove(entity); 
    } 
} 

如果條目的狀態爲Detached,將安裝在進入DbSet當它拋出一個錯誤?

+0

你在哪裏找到它,當你刪除某些內容時會發生什麼 – 2014-09-28 08:53:29

+0

你不附加和刪除,你要麼附加或刪除它。如果您使用附加策略,那麼您將其EntityState設置爲已刪除。如果你使用remove方法,那麼你只需要使用remove。 – 2014-09-28 10:10:56

回答

2

如果你所有的實體具有財產嘗試下面的代碼Id(從IEntity繼承例如,所有的實體):

public interface IEntity 
{ 
    public int Id { get; set; }  
} 
// T is IEntity 
public virtual void Delete(T entity) 
{  
    var ent = this.DbContext.Set<T>().Find(entity.Id); 

    if (ent != null) 
    { 
     this.DbContext.Set<T>().Remove(entity) 
    } 
} 

如果沒有,請嘗試以下代碼:

public virtual void Delete(T entity) { 

    DbEntityEntry dbEntityEntry = this.DbContext.Entry<T>(entity); 
    if (dbEntityEntry.State != EntityState.Detached) { 

     dbEntityEntry.State = EntityState.Deleted; 
    } 
    else { 

     DbSet dbSet = this.DbContext.Set<T>(); 
     dbSet.Attach(entity); 
     dbSet.Remove(entity); 
    } 
}