• EF封装类 增加版,增加从缓存中查找数据方法,供参考!


    EF封装类 增加版,增加从缓存中查找数据方法,供参考!

    这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都改成静态方法就可以直接调用了,可能有不足之处,欢迎大家在本文下面评论留言,共同完善,谢谢!

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Objects.DataClasses;
    using ZBService.Model;
    using System.Linq.Expressions;
    using System.Web;
    
    namespace ZBService
    {
        public abstract class ServiceBase<T> where T : EntityObject
        {
            /// <summary>
            /// EF上下文对象
            /// </summary>
            protected mZhaoBiaoEntities zbEntities = new mZhaoBiaoEntities();
    
            /// <summary>
            /// 判断是否存在
            /// </summary>
            /// <param name="whereExpr"></param>
            /// <returns></returns>
            public bool Exist(Expression<Func<T, bool>> whereExpr)
            {
                return (this.Count(whereExpr) > 0);
            }
    
            /// <summary>
            /// 获取记录数
            /// </summary>
            /// <param name="whereExpr"></param>
            /// <returns></returns>
            public int Count(Expression<Func<T, bool>> whereExpr)
            {
                return zbEntities.CreateObjectSet<T>().Where(whereExpr).Count();
            }
    
            /// <summary>
            /// 查找实体对象
            /// </summary>
            /// <param name="whereExpr"></param>
            /// <returns></returns>
            public T Find(Expression<Func<T, bool>> whereExpr)
            {
                return zbEntities.CreateObjectSet<T>().Where(whereExpr).FirstOrDefault();
            }
    
            /// <summary>
            /// 从缓存中查找实体对象
            /// </summary>
            /// <param name="whereExpr"></param>
            /// <param name="cacheKey"></param>
            /// <param name="expireTime"></param>
            /// <returns></returns>
            public T FindFromCache(Expression<Func<T, bool>> whereExpr, string cacheKey, DateTime expireTime)
            {
                T entity;
                object obj = HttpRuntime.Cache[cacheKey];
                if (obj == null)
                {
                    entity = this.Find(whereExpr);
                    HttpRuntime.Cache.Insert(cacheKey, entity, null, expireTime, System.Web.Caching.Cache.NoSlidingExpiration);
                }
                else
                {
                    entity = obj as T;
                }
                return entity;
            }
    
            /// <summary>
            /// 查找实体对象列表
            /// </summary>
            /// <param name="whereExpr"></param>
            /// <returns></returns>
            public IEnumerable<T> FindList<TKey>(Expression<Func<T, bool>> whereExpr, Expression<Func<T, TKey>> orderbyExpr, int orderDirection)
            {
                return this.FindList<T, TKey>(whereExpr, t => t, orderbyExpr, orderDirection);
            }
    
            /// <summary>
            /// 从缓存中查找实体对象列表
            /// </summary>
            /// <typeparam name="TKey"></typeparam>
            /// <param name="whereExpr"></param>
            /// <param name="orderbyExpr"></param>
            /// <param name="orderDirection"></param>
            /// <param name="cacheKey"></param>
            /// <param name="expireTime"></param>
            /// <returns></returns>
            public IEnumerable<T> FindListFromCache<TKey>(Expression<Func<T, bool>> whereExpr, Expression<Func<T, TKey>> orderbyExpr, int orderDirection, string cacheKey, DateTime expireTime)
            {
                return this.FindListFromCache(whereExpr, t => t, orderbyExpr, orderDirection, -1, cacheKey, expireTime);
            }
    
            /// <summary>
            /// 查找实体对象列表
            /// </summary>
            /// <typeparam name="TResult"></typeparam>
            /// <typeparam name="TKey"></typeparam>
            /// <param name="whereExpr"></param>
            /// <param name="selectExpr"></param>
            /// <param name="orderbyExpr"></param>
            /// <param name="orderDirection"></param>
            /// <param name="returnCount"></param>
            /// <returns></returns>
            public IEnumerable<TResult> FindList<TResult, TKey>(Expression<Func<T, bool>> whereExpr, Expression<Func<T, TResult>> selectExpr, Expression<Func<TResult, TKey>> orderbyExpr, int orderDirection, int returnCount = -1)
            {
                var result = zbEntities.CreateObjectSet<T>().Where(whereExpr).Select(selectExpr);
                if (result != null && result.Count() > 0)
                {
                    if (orderDirection > 0)
                    {
                        result = result.OrderByDescending(orderbyExpr);
                    }
                    else
                    {
                        result = result.OrderBy(orderbyExpr);
                    }
    
                    if (returnCount > 0)
                    {
                        result = result.Take(returnCount);
                    }
    
                    return result.ToList();
                }
                return null;
            }
    
            /// <summary>
            /// 从缓存中查找对象列表
            /// </summary>
            /// <typeparam name="TResult"></typeparam>
            /// <typeparam name="TKey"></typeparam>
            /// <param name="whereExpr"></param>
            /// <param name="selectExpr"></param>
            /// <param name="orderbyExpr"></param>
            /// <param name="orderDirection"></param>
            /// <param name="returnCount"></param>
            /// <param name="cacheKey"></param>
            /// <param name="expireTime"></param>
            /// <returns></returns>
            public IEnumerable<TResult> FindListFromCache<TResult, TKey>(Expression<Func<T, bool>> whereExpr, Expression<Func<T, TResult>> selectExpr, Expression<Func<TResult, TKey>> orderbyExpr, int orderDirection,
                                        int returnCount, string cacheKey, DateTime expireTime)
            {
                IEnumerable<TResult> resultList;
                object obj = HttpRuntime.Cache[cacheKey];
                if (obj == null)
                {
                    resultList = this.FindList(whereExpr, selectExpr,orderbyExpr, orderDirection,returnCount);
                    HttpRuntime.Cache.Insert(cacheKey, resultList, null, expireTime, System.Web.Caching.Cache.NoSlidingExpiration);
                }
                else
                {
                    resultList = obj as IEnumerable<TResult>;
                }
                return resultList;
            }
    
            /// <summary>
            /// 分页查找实体对象列表
            /// </summary>
            /// <typeparam name="TResult"></typeparam>
            /// <typeparam name="TKey"></typeparam>
            /// <param name="whereExpr"></param>
            /// <param name="selectExpr"></param>
            /// <param name="orderbyExpr"></param>
            /// <param name="orderDirection"></param>
            /// <param name="pageSize"></param>
            /// <param name="pageNo"></param>
            /// <param name="recordCount"></param>
            /// <returns></returns>
            public IEnumerable<TResult> FindListByPage<TResult, TKey>(Expression<Func<T, bool>> whereExpr, Expression<Func<T, TResult>> selectExpr, Expression<Func<TResult, TKey>> orderbyExpr, int orderDirection, int pageSize, int pageNo, out int recordCount)
            {
                recordCount = 0;
                var result = zbEntities.CreateObjectSet<T>().Where(whereExpr).Select(selectExpr);
                if (result == null) return null;
                recordCount = result.Count();
    
                if (pageNo > recordCount) pageNo = recordCount;
                if (pageNo <= 0) pageNo = 1;
    
                if (recordCount > 0)
                {
                    if (recordCount > pageSize)
                    {
                        if (orderDirection > 0)
                        {
                            return result.OrderByDescending(orderbyExpr).Skip((pageNo - 1) * pageSize).Take(pageSize).ToList();
                        }
                        else
                        {
                            return result.OrderBy(orderbyExpr).Skip((pageNo - 1) * pageSize).Take(pageSize).ToList();
                        }
                    }
                    else
                    {
                        if (orderDirection > 0)
                        {
                            return result.OrderByDescending(orderbyExpr).ToList();
                        }
                        else
                        {
                            return result.OrderBy(orderbyExpr).ToList();
                        }
                    }
    
                }
                return null;
            }
    
            /// <summary>
            /// 从缓存中分页查找实体对象列表
            /// </summary>
            /// <typeparam name="TResult"></typeparam>
            /// <typeparam name="TKey"></typeparam>
            /// <param name="whereExpr"></param>
            /// <param name="selectExpr"></param>
            /// <param name="orderbyExpr"></param>
            /// <param name="orderDirection"></param>
            /// <param name="pageSize"></param>
            /// <param name="pageNo"></param>
            /// <param name="recordCount"></param>
            /// <param name="cacheKey"></param>
            /// <param name="expireTime"></param>
            /// <returns></returns>
            public IEnumerable<TResult> FindListByPageFromCache<TResult, TKey>(Expression<Func<T, bool>> whereExpr, Expression<Func<T, TResult>> selectExpr, Expression<Func<TResult, TKey>> orderbyExpr, int orderDirection, int pageSize, int pageNo, out int recordCount,
                        string cacheKey, DateTime expireTime)
            {
                recordCount = 0;
                IQueryable<TResult> result;
                object obj = HttpRuntime.Cache[cacheKey];
                if (obj == null)
                {
                    result = zbEntities.CreateObjectSet<T>().Where(whereExpr).Select(selectExpr);
                }
                else
                {
                    result = obj as IQueryable<TResult>;
                }
    
                if (result == null) return null;
                recordCount = result.Count();
    
    
                if (pageNo > recordCount) pageNo = recordCount;
                if (pageNo <= 0) pageNo = 1;
    
                if (recordCount > 0)
                {
                    if (recordCount > pageSize)
                    {
                        if (orderDirection > 0)
                        {
                            return result.OrderByDescending(orderbyExpr).Skip((pageNo - 1) * pageSize).Take(pageSize).ToList();
                        }
                        else
                        {
                            return result.OrderBy(orderbyExpr).Skip((pageNo - 1) * pageSize).Take(pageSize).ToList();
                        }
                    }
                    else
                    {
                        if (orderDirection > 0)
                        {
                            return result.OrderByDescending(orderbyExpr).ToList();
                        }
                        else
                        {
                            return result.OrderBy(orderbyExpr).ToList();
                        }
                    }
    
                }
                return null;
    
            }
    
            /// <summary>
            /// 增加实体
            /// </summary>
            /// <param name="entity"></param>
            public virtual void Add(T entity)
            {
                this.ValidateEntity(entity, ValidateMode.Add);
                zbEntities.CreateObjectSet<T>().AddObject(entity);
            }
    
    
            /// <summary>
            /// 增加实体列表
            /// </summary>
            /// <param name="entities"></param>
            public virtual void AddList(IEnumerable<T> entities)
            {
                var objSet = zbEntities.CreateObjectSet<T>();
                foreach (T entity in entities)
                {
                    this.ValidateEntity(entity, ValidateMode.Add);
                    objSet.AddObject(entity);
                }
            }
    
            /// <summary>
            /// 更新已分离实体,若未分离则不需要执行该方法
            /// </summary>
            /// <param name="entity"></param>
            public virtual void Update(T entity)
            {
                this.ValidateEntity(entity, ValidateMode.Update);
                zbEntities.CreateObjectSet<T>().ApplyCurrentValues(entity);
            }
    
            /// <summary>
            /// 删除实体
            /// </summary>
            /// <param name="entity"></param>
            public virtual void Delete(T entity)
            {
                this.ValidateEntity(entity, ValidateMode.Delete);
                zbEntities.CreateObjectSet<T>().DeleteObject(entity);
            }
    
            /// <summary>
            /// 删除实体
            /// </summary>
            /// <param name="whereExpr"></param>
            public virtual void Delete(Expression<Func<T, bool>> whereExpr)
            {
                var objSet = zbEntities.CreateObjectSet<T>();
                T entity = objSet.Where(whereExpr).Single();
                //this.ValidateEntity(entity, ValidateMode.Delete);
                objSet.DeleteObject(entity);
            }
    
            /// <summary>
            /// 删除实体列表
            /// </summary>
            /// <param name="entities"></param>
            public virtual void DeleteList(IEnumerable<T> entities)
            {
                var objSet = zbEntities.CreateObjectSet<T>();
                foreach (T entity in entities)
                {
                    //this.ValidateEntity(entity, ValidateMode.Delete);
                    objSet.DeleteObject(entity);
                }
            }
    
    
            /// <summary>
            /// 提交保存所有变更操作
            /// </summary>
            public void SubmitSave()
            {
                zbEntities.SaveChanges();
            }
    
    
            /// <summary>
            /// 验证
            /// </summary>
            /// <param name="entity"></param>
            /// <returns></returns>
            protected virtual void ValidateEntity(T entity, ValidateMode mode = ValidateMode.Add)
            {
    
            }
    
            /// <summary>
            /// 验证模式
            /// </summary>
            protected enum ValidateMode
            {
                Add = 0,
                Update = 1,
                Delete = -1
            }
    
        }
    }
    
    
    

    之前发表的文章详见:http://www.cnblogs.com/zuowj/p/4259515.html

  • 相关阅读:
    三菱Q系列PLC MC协议通讯
    相机常用属性配置简介[转]---Labview IMAQ 修改相机曝光等参数的方法
    数码显微镜的实际放大倍数的正确计算方法【转载】
    VS2012 C# 配置log4net
    CHM格式帮助文档无法打开的问题
    win10 下安装win7虚拟机
    杂记:使用RawCap和Wireshark对 127.0.0.1或localhost 进行抓包
    杂记:01
    linux应用编程一:文件IO和目录操作
    QTableWidget常用函数及注意事项
  • 原文地址:https://www.cnblogs.com/zuowj/p/4278537.html
Copyright © 2020-2023  润新知