数据仓储之DLL层接口设计

Posted CeleryCabbage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓储之DLL层接口设计相关的知识,希望对你有一定的参考价值。

  1 一、接口设计
  2 1.1. IBaseRepository.cs
  3 public interface IBaseRepository<T>
  4     {
  5         T Add(T entity);
  6         bool Update(T entity);
  7         bool Delete(T entity);
  8         IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda);
  9         IQueryable<T> LoadPageEntities<S>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Expression<Func<T, S>> orderbyLambda, bool isAsc);
 10 
 11     }
 12 1.2. ICompanyRepository.cs
 13 public interface ICompanyRepository:IBaseRepository<Company>
 14     {
 15         
 16     }
 17 二、接口实现
 18 2.1 BaseRepository.cs
 19 public class BaseRepository<T> where T:class,new()
 20     {
 21         private ObjectContext dbContext
 22         {
 23             get
 24             {
 25                 return EFDbContextFactory.GetCurrentDbContext();
 26             }
 27         }
 28         public virtual T Add(T entity)
 29         {
 30             dbContext.CreateObjectSet<T>().AddObject(entity);
 31             return entity;
 32         }
 33 
 34         public virtual bool Update(T entity)
 35         {
 36            
 37             dbContext.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);
 38             return true;
 39         }
 40 
 41         public virtual bool Delete(T entity)
 42         {
 43             dbContext.ObjectStateManager.ChangeObjectState(entity,System.Data.EntityState.Deleted);
 44             return true;
 45         }
 46 
 47         public IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda)
 48         {
 49             return dbContext.CreateObjectSet<T>().Where(whereLambda).AsQueryable();
 50         }
 51         public IQueryable<T> LoadPageEntities<S>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Expression<Func<T,S>> orderbyLambda, bool isAsc)
 52         {
 53             total = dbContext.CreateObjectSet<T>().Where(whereLambda).Count();
 54             if (isAsc)
 55             {
 56                 return dbContext.CreateObjectSet<T>()
 57                                 .Where(whereLambda)
 58                                 .OrderBy(orderbyLambda)
 59                                 .Skip(pageSize * (pageIndex - 1))
 60                                 .AsQueryable();
 61             }
 62             else
 63             {
 64                 return dbContext.CreateObjectSet<T>()
 65                                 .Where(whereLambda)
 66                                 .OrderByDescending(orderbyLambda)
 67                                 .Skip(pageSize * (pageIndex - 1))
 68                                 .AsQueryable();
 69             }
 70         }
 71     }
 72 2.2 CompanyRepository.cs
 73  public class CompanyRepository : BaseRepository<Company>,ICompanyRepository
 74     {
 75         
 76     }
 77 三、IDbSession
 78 3.1 IDbSession.cs
 79 public  interface IDbSession
 80     {
 81        IMemberRepository MemberRepository { get; }
 82        IServiceTypeRepository ServiceTypeRepository { get; }
 83        IServiceRepository ServiceRepository { get; }
 84        ICompanyRepository CompanyRepository { get; }
 85        IProductGroupRepository ProductGroupRepository { get; }
 86        int SaveChanges();
 87     }
 88 3.2 DbSession.cs
 89 public class DbSession : IDbSession
 90     {
 91         private IMemberRepository _MemberRepository;
 92         private IServiceTypeRepository _ServiceTypeRepository;
 93         private IServiceRepository _ServiceRepository;
 94         private ICompanyRepository _CompanyRepository;
 95         private IProductGroupRepository _ProductGroupRepository;
 96 
 97         public IMemberRepository MemberRepository
 98         {
 99             get
100             {
101                 if (_MemberRepository == null)
102                 {
103                     _MemberRepository = new MemberRepository();
104                 }
105                 return _MemberRepository;
106             }
107         }
108 
109         public IServiceTypeRepository ServiceTypeRepository
110         {
111             get
112             {
113                 if (_ServiceTypeRepository == null)
114                 {
115                     _ServiceTypeRepository = new ServiceTypeRepository();
116                 }
117                 return _ServiceTypeRepository;
118             }
119         }
120 
121         public IServiceRepository ServiceRepository
122         {
123             get
124             {
125                 if (_ServiceRepository == null)
126                 {
127                     _ServiceRepository = new ServiceRepository();
128                 }
129                 return _ServiceRepository;
130             }
131         }
132 
133         public ICompanyRepository CompanyRepository
134         {
135             get
136             {
137                 if (_CompanyRepository == null)
138                 {
139                     _CompanyRepository = new CompanyRepository();
140                 }
141                 return _CompanyRepository;
142             }
143         }
144 
145         public IProductGroupRepository ProductGroupRepository
146         {
147             get
148             {
149                 if (_ProductGroupRepository == null)
150                 {
151                     _ProductGroupRepository = new ProductGroupRepository();
152                 }
153                 return _ProductGroupRepository;
154             }
155         }
156 
157         public int SaveChanges()
158         {
159             return EFDbContextFactory.GetCurrentDbContext().SaveChanges();
160         }
161 
162 
163         
164     }
165 3.3 EFDbContextFactory.cs
166  public class EFDbContextFactory
167     {
168         public static ObjectContext GetCurrentDbContext()
169         {
170             
171                 //线程内唯一
172                 ObjectContext dbContext = (ObjectContext)CallContext.GetData("dbContext");
173                 if (dbContext == null)
174                 {
175                     dbContext = new SimpleNewsContext();
176                     CallContext.SetData("dbContext", dbContext);
177                 }
178                 return dbContext;
179             }
180        
181     }

 

以上是关于数据仓储之DLL层接口设计的主要内容,如果未能解决你的问题,请参考以下文章

ABP领域层-仓储

设置storage模块的数据库操作支持添加仓储分类列表接口(dao层)

.NET ORM 仓储层必备的功能介绍之 FreeSql Repository 实现篇

关于一点儿对仓储(Repository)的理解

添加仓储分类列表接口(service层和controller层)

ABP官方文档翻译 3.3 仓储