asp.net-mvc – 具有软删除功能的通用存储库
发布时间:2020-12-16 03:28:01 所属栏目:asp.Net 来源:网络整理
导读:我有一个通用的存储库实现.我正在使用asp.net mvc c#,代码第一个实体框架. 我创建了一个名为ISoftDelete的接口: public interface ISoftDelete{ bool IsDeleted { get; set; }} 我在我的基础存储库中实现了Delete和GetById,如下所示: public virtual void
我有一个通用的存储库实现.我正在使用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(); } 当从ISoftDelete派生T时,如何修改它以便列出IsDeleted == false的记录? 谢谢! 解决方法
1)每次你需要知道它时,检查是否(实体是ISoftDelete)似乎没有问题.如果你确定你不打算在其他地方检查它可能没问题.就性能而言,如果您删除具有IsDeleted == true且永远不会从db获取它们的记录,那会更好.您可能需要派生一个新的基本存储库,它会覆盖这些方法并为ISoftDelete对象实现新的逻辑.
public abstract class BaseRepository<T> { // protected dbset; public virtual void Delete(T entity) { dbset.Remove(entity); } public virtual T GetById(long id) { return dbset.Find(id); } public virtual IEnumerable<T> GetAll() { return dbset.ToList(); } } public abstract class SoftDeleteRepository<T> : BaseRepository<T> where T : ISoftDelete { public override void Delete(T entity) { entity.IsDeleted = true; } public override T GetById(long id) { return (from t in dbSet where !t.IsDeleted && t.Id == id select t) .FirstOrDefault(); } public override IEnumerable<T> GetAll() { return (from t in dbset where !t.IsDeleted select t).ToList(); } } public static class RepositoryFactory { public static BaseRepository<T> GetInstance<T>() { // pseudo code if (typeof(T) implements ISoftDelete) return repository of T which extends SoftDeleteRepository return repository of T which extends BaseRepository } } 2)可能是这样的 return (from t in dbset where (t is ISoftDelete && !(t as ISoftDelete).IsDeleted) || !(t is ISoftDelete)) .ToList(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 在.NET .NET页面生命周期中,DataBinding事件何时
- asp.net-mvc-3 – MVC3页面 – IsPostback功能
- asp.net成员资格 – 在Application_AuthenticationRequest设
- 母版页(Master Pages)
- asp.net jquery ajax json:交换数据的简单例子
- asp.net-mvc – asp.net mvc多参数动态图像请求?
- asp.net-mvc – ASP.NET MVC RadioButtonListFor始终是预设
- asp.net-mvc – 如何将服务器错误的http状态代码捕获到ASP.
- asp.net – monodevelop可以像没有VS2010一样进行Web.confi
- 分步ASP.NET自动构建/部署
推荐文章
站长推荐
- asp.net-mvc – ASP .NET MVC在视图之间存储大量
- asp.net-mvc – 动态生成sitemap.xml
- asp.net-mvc-3 – 在ASP.NET MVC 3中使用不显眼的
- asp.net – 我需要将.compiled文件复制到生产服务
- .net – ANTS Memory Profiler – 我应该关注哪个
- ASP.NET MVC5 中百度ueditor富文本编辑器的使用(
- ASP.net vs PHP(选择什么)
- asp.net-mvc – asp.net MVC应该是View-Model封装
- asp.net-mvc – 重定向到不同的控制器
- 集成ASP.NET Webforms,WebAPI和AngularJS
热点阅读