对EF的封装
封装 ef
2023-09-14 08:59:31 时间
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 } } }
转发地址:https://www.cnblogs.com/zuowj/p/4259515.html
相关文章
- 一个简单的Fibonacci类的封装
- 封装CoreGraphics的API简化绘图操作
- PHP封装成应用程序的三个方案
- 第一百四十七节,封装库--JavaScript,滑动导航
- 第一百四十二节,JavaScript,封装库--运动动画和透明度动画
- EasyDarwin开源音频解码项目EasyAudioDecoder:EasyPlayer Android音频解码库(第二部分,封装解码器接口)
- Atitit. C# java 的api 目录封装结构映射总结
- 微搭低代码封装地图组件
- 如何在Vue组件中调用封装好的外部js文件方法
- java使用BeanUtils封装file类型表单数据到一个对象中
- Muduo网络库源代码分析(四)EventLoopThread和EventLoopThreadPool的封装
- mysqli DB封装
- C++CLR类库封装Native类库并用C#调用 - 草稿
- (8)Lightweight OpenPose轻量化模型之 模型封装 + 摔倒检测