我有一个通用的存储库实现。我正在使用 asp.net mvc c#,代码优先实体框架。
我创建了一个名为 ISoftDelete 的接口:
public interface ISoftDelete
{
bool IsDeleted { get; set; }
}
我在我的基础存储库中实现了 Delete 和 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();
}
当 T 从 ISoftDelete 派生时,我应该如何修改它以列出 IsDeleted == false 的记录?
谢谢!