zoukankan      html  css  js  c++  java
  • 不成功的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     }
  • 相关阅读:
    动态生成 Excel 文件供浏览器下载的注意事项
    JavaEE 中无用技术之 JNDI
    CSDN 泄露用户密码给我们什么启示
    刚发布新的 web 单点登录系统,欢迎下载试用,欢迎提建议
    jQuery jqgrid 对含特殊字符 json 数据的 Java 处理方法
    一个 SQL 同时验证帐号是否存在、密码是否正确
    PostgreSQL 数据库在 Windows Server 2008 上安装注意事项
    快速点评 Spring Struts Hibernate
    Apache NIO 框架 Mina 使用中出现 too many open files 问题的解决办法
    解决 jQuery 版本升级过程中出现 toLowerCase 错误 更改 doctype
  • 原文地址:https://www.cnblogs.com/minglilee2012/p/4043779.html
Copyright © 2011-2022 走看看