【发布时间】:2012-11-08 23:16:29
【问题描述】:
我有一个通用的存储库实现。我正在使用 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 的记录?
谢谢!
【问题讨论】:
标签: asp.net-mvc ef-code-first repository-pattern