对EF的封装

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.DataClasses;
using ZBService.Model;
using System.Linq.Expressions;

namespace ZBService
{
    public abstract class ServiceBase<T> where T:EntityObject
    {
        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>
        /// <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="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 (returnCount > 0)
                {
                    if (orderDirection > 0)
                    {
                        result = result.OrderByDescending(orderbyExpr).Take(returnCount);
                    }
                    else
                    {
                        result = result.OrderBy(orderbyExpr).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="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)
        {
            var result = zbEntities.CreateObjectSet<T>().Where(whereExpr).Select(selectExpr);
            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
        }

    }
}
C#

转发地址:https://www.cnblogs.com/zuowj/p/4259515.html

posted @ 2018-11-27 11:24  人走茶良  阅读(966)  评论(1编辑  收藏  举报
推荐:华为云