我有一個通用的存儲庫實現。我使用的是asp.net mvc c#,代碼第一個實體框架。具有軟刪除功能的通用存儲庫
我創建了一個名爲ISoftDelete接口:
public interface ISoftDelete
{
bool IsDeleted { get; set; }
}
我實現了我的基礎庫中刪除,並GetById如下:
public virtual void Delete(T entity)
{
if (entity is ISoftDelete)
{
((ISoftDelete)entity).IsDeleted = true;
}
else
{
dbset.Remove(entity);
}
}
public virtual T GetById(long id)
{
T obj = dbset.Find(id);
if (obj is ISoftDelete)
{
if (((ISoftDelete)obj).IsDeleted)
return null;
else
return obj;
}
else
{
return obj;
}
}
現在,我有2個問題。
1)這種方法是一個好方法嗎?任何性能相關的問題?
2)在基本資料庫我原來GETALL功能是這樣的:
public virtual IEnumerable<T> GetAll()
{
return dbset.ToList();
}
我應如何修改它以列表記錄請將isDeleted地方==假的,當T是從ISoftDelete衍生?
謝謝!
1很好的解決方案 –
公共覆蓋ŤGetById(長ID)這個函數拋出上t.Id.錯誤 – SherleyDev
如果你在你的BaseRepository中放置了一個'GetById(long id)'方法,這意味着你假設你的項目中的任何實體實例都應該具有'long ID'屬性。爲了滿足這個要求,你可以定義一個接口,如IEntity {long Id {get; }}'並將其應用於所有實體。並從這個接口派生你的'ISoftDelete'。 'interface ISoftDelete:IEntity {bool IsDeleted {get;組; }}。現在你的SoftDeleteRepository確信每個T實例都有Id和IsDeleted屬性。 –