• 不成功的MVC Repository模式,记录下来,后面看看原因在哪里(二) Repository类


      1  public class Repository<T> : IRepository<T> where T : class
      2     {
      3         public WBIDbContext m_Context=WBIContextFactory.GetCurrentContext();//上下文数据库
      4         public DbSet<T> dbSet;
      5         public Repository(WBIDbContext dbContext)
      6         {
      7             this.m_Context = dbContext;
      8             this.dbSet = dbContext.Set<T>();
      9         }
     10 
     11         protected IRepository<T> m_currentRepository1 { get; set; }
     12         protected IDevTypeRepository m_currentRepository { get; set; }
     13         public Repository(IDevTypeRepository currentRepository)
     14         {
     15             m_currentRepository = currentRepository;
     16         }
     17 
     18         public T Add(T entity)
     19         {
     20             //设置实体的状态 add
     21             m_Context.Entry<T>(entity).State = System.Data.Entity.EntityState.Added;
     22             //将上下文中所做的更改保存到数据库中
     23             m_Context.SaveChanges();
     24             //返回保存后的实体
     25             return entity;
     26         }
     27 
     28         public bool Update(T entity)
     29         {
     30             m_Context.Set<T>().Attach(entity);
     31             m_Context.Entry<T>(entity).State = System.Data.Entity.EntityState.Modified;
     32             return m_Context.SaveChanges() > 0;
     33         }
     34 
     35         public bool Delete(T entity)
     36         
     37         {
     38             m_Context.Set<T>().Attach(entity);
     39             m_Context.Entry<T>(entity).State = System.Data.Entity.EntityState.Deleted;
     40             return m_Context.SaveChanges() > 0;
     41         }
     42 
     43         //名字是否为空
     44         public bool CheckNameIsEmpty(Expression<Func<T, bool>> whereLambda)
     45         {
     46             return m_Context.Set<T>().Any(whereLambda);
     47         }
     48 
     49         //名字是否存在
     50         public bool CheckNameExist(Expression<Func<T, bool>> whereLambda)
     51         {
     52             return m_Context.Set<T>().Any(whereLambda);
     53         }
     54         //检查其他项
     55         public bool Check(Expression<Func<T, bool>> whereLambda)
     56         {
     57             return m_Context.Set<T>().Any(whereLambda);
     58         }
     59         //保存
     60         //public void Save()
     61         //{
     62         //    m_Context.SaveChanges();
     63  
     64         //}
     65 
     66         public int Count(Expression<Func<T, bool>> predicate)
     67         {
     68             return m_Context.Set<T>().Count(predicate);
     69         }
     70 
     71         public List<T> ToList()
     72         {
     73             return m_Context.Set<T>().ToList();
     74         }
     75 
     76         public T Find(Expression<Func<T, bool>> whereLambda)
     77         {
     78             T entity = m_Context.Set<T>().FirstOrDefault<T>(whereLambda);
     79             return entity;
     80         }
     81 
     82         public IQueryable<T> FindList(Expression<Func<T, bool>> whereLamba, string orderName, bool isAsc)
     83         {
     84             var list = m_Context.Set<T>().Where(whereLamba);
     85             list = OrderBy(list, orderName, isAsc);
     86             return list;
     87         }
     88 
     89         public IQueryable<T> FindList<S>(Expression<Func<T, bool>> whereLambda, bool isAsc, Expression<Func<T, S>> orderLamba)
     90         {
     91             var list = m_Context.Set<T>().Where<T>(whereLambda);
     92             if (isAsc)
     93             {
     94                 list = list.OrderBy<T, S>(orderLamba);
     95             }
     96             else
     97             {
     98                 list = list.OrderByDescending<T, S>(orderLamba);//降序排列
     99             }
    100             return list;
    101         }
    102 
    103 
    104 
    105 
    106         public IQueryable<T> FindPageList<S>(int pageIndex, int pageSize, out int totalRecordCnt,
    107     Expression<Func<T, bool>> whereLamdba, bool isAsc, Expression<Func<T, S>> orderLambda)
    108         {
    109             var list = m_Context.Set<T>().Where<T>(whereLamdba);
    110             totalRecordCnt = list.Count();
    111 
    112             if (isAsc)
    113             {
    114                 list = list.OrderBy<T, S>(orderLambda)
    115                     .Skip<T>((pageIndex - 1) * pageSize).Take<T>(pageSize);
    116             }
    117             else
    118             {
    119                 list = list.OrderByDescending<T, S>(orderLambda)
    120                     .Skip<T>((pageIndex - 1) * pageSize).Take<T>(pageSize);
    121             }
    122 
    123             return list;
    124         }
    125 
    126 
    127 
    128         #region Private Methods
    129         /// <summary>
    130         /// 排序
    131         /// </summary>
    132         /// <typeparam name="T">类型</typeparam>
    133         /// <param name="source">原IQueryable</param>
    134         /// <param name="propertyName">排序属性名</param>
    135         /// <param name="isAsc">是否升序</param>
    136         /// <returns>排序后的IQueryable</returns>
    137         private IQueryable<T> OrderBy(IQueryable<T> source, string propertyName, bool isAsc)
    138         {
    139             if (source == null)
    140             {
    141                 throw new ArgumentNullException("source", "不能为空");
    142             }
    143             if (string.IsNullOrEmpty(propertyName))
    144             {
    145                 return source;
    146             }
    147             var parameter = Expression.Parameter(source.ElementType);
    148             var property = Expression.Property(parameter, propertyName);
    149             if (property == null)
    150             {
    151                 throw new ArgumentNullException("propertyName", "属性不存在");
    152             }
    153             var lambda = Expression.Lambda(property, parameter);
    154             var methodName = isAsc ? "OrderBy" : "OrderByDescending";
    155             var resultExpression = Expression.Call(typeof(Queryable), methodName,
    156                 new Type[] { source.ElementType, property.Type }, source.Expression, Expression.Quote(lambda));
    157             return source.Provider.CreateQuery<T>(resultExpression);
    158         }
    159         #endregion
    160     }
  • 相关阅读:
    玩转spring boot——结合JPA事务
    玩转spring boot——结合AngularJs和JDBC
    玩转spring boot——结合jQuery和AngularJs
    028_Mac急救箱快捷键
    006_身体部位名词
    005_Philippines之行准备
    027_MacOs上如何将多页word打印到一个页面上
    026_PPT知识汇总
    025_Excel知识汇总
    024_Word知识汇总
  • 原文地址:https://www.cnblogs.com/minglilee2012/p/4043779.html
Copyright © 2020-2023  润新知