EF封装类,供参考!

以下是我对EF DB FIRST 生成的ObjectContext类进行封装,代码如下,供参考学习:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Data.Objects.DataClasses;
  6 using ZBService.Model;
  7 using System.Linq.Expressions;
  8
  9 namespace ZBService
 10 {
 11     public abstract class ServiceBase<T> where T:EntityObject
 12     {
 13         protected mZhaoBiaoEntities zbEntities = new mZhaoBiaoEntities();
 14
 15         /// <summary>
 16         /// 判断是否存在
 17         /// </summary>
 18         /// <param name="whereExpr"></param>
 19         /// <returns></returns>
 20         public bool Exist(Expression<Func<T,bool>> whereExpr)
 21         {
 22             return (this.Count(whereExpr) > 0);
 23         }
 24
 25         /// <summary>
 26         /// 获取记录数
 27         /// </summary>
 28         /// <param name="whereExpr"></param>
 29         /// <returns></returns>
 30         public int Count(Expression<Func<T, bool>> whereExpr)
 31         {
 32             return zbEntities.CreateObjectSet<T>().Where(whereExpr).Count();
 33         }
 34
 35         /// <summary>
 36         /// 查找实体对象
 37         /// </summary>
 38         /// <param name="whereExpr"></param>
 39         /// <returns></returns>
 40         public T Find(Expression<Func<T, bool>> whereExpr)
 41         {
 42             return zbEntities.CreateObjectSet<T>().Where(whereExpr).FirstOrDefault();
 43         }
 44
 45         /// <summary>
 46         /// 查找实体对象列表
 47         /// </summary>
 48         /// <param name="whereExpr"></param>
 49         /// <returns></returns>
 50         public IEnumerable<T> FindList<TKey>(Expression<Func<T, bool>> whereExpr, Expression<Func<T, TKey>> orderbyExpr, int orderDirection)
 51         {
 52             return this.FindList<T, TKey>(whereExpr,t=>t,orderbyExpr,orderDirection);
 53         }
 54
 55         /// <summary>
 56         /// 查找实体对象列表
 57         /// </summary>
 58         /// <typeparam name="TResult"></typeparam>
 59         /// <typeparam name="TKey"></typeparam>
 60         /// <param name="whereExpr"></param>
 61         /// <param name="selectExpr"></param>
 62         /// <param name="orderbyExpr"></param>
 63         /// <param name="orderDirection"></param>
 64         /// <param name="returnCount"></param>
 65         /// <returns></returns>
 66         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)
 67         {
 68             var result = zbEntities.CreateObjectSet<T>().Where(whereExpr).Select(selectExpr);
 69             if (result != null && result.Count() > 0)
 70             {
 71                 if (returnCount > 0)
 72                 {
 73                     if (orderDirection > 0)
 74                     {
 75                         result = result.OrderByDescending(orderbyExpr).Take(returnCount);
 76                     }
 77                     else
 78                     {
 79                         result = result.OrderBy(orderbyExpr).Take(returnCount);
 80                     }
 81                 }
 82                 return result.ToList();
 83             }
 84             return null;
 85         }
 86
 87         /// <summary>
 88         /// 分页查找实体对象列表
 89         /// </summary>
 90         /// <typeparam name="TResult"></typeparam>
 91         /// <typeparam name="TKey"></typeparam>
 92         /// <param name="whereExpr"></param>
 93         /// <param name="selectExpr"></param>
 94         /// <param name="orderbyExpr"></param>
 95         /// <param name="orderDirection"></param>
 96         /// <param name="pageSize"></param>
 97         /// <param name="pageNo"></param>
 98         /// <param name="recordCount"></param>
 99         /// <returns></returns>
100         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)
101         {
102             var result = zbEntities.CreateObjectSet<T>().Where(whereExpr).Select(selectExpr);
103             recordCount = result.Count();
104
105             if(pageNo>recordCount) pageNo=recordCount;
106             if(pageNo<=0) pageNo=1;
107
108             if (recordCount > 0)
109             {
110                 if (recordCount > pageSize)
111                 {
112                     if (orderDirection > 0)
113                     {
114                         return result.OrderByDescending(orderbyExpr).Skip((pageNo - 1) * pageSize).Take(pageSize).ToList();
115                     }
116                     else
117                     {
118                         return result.OrderBy(orderbyExpr).Skip((pageNo - 1) * pageSize).Take(pageSize).ToList();
119                     }
120                 }
121                 else
122                 {
123                     if (orderDirection > 0)
124                     {
125                         return result.OrderByDescending(orderbyExpr).ToList();
126                     }
127                     else
128                     {
129                         return result.OrderBy(orderbyExpr).ToList();
130                     }
131                 }
132
133             }
134             return null;
135         }
136
137
138
139
140         /// <summary>
141         /// 增加实体
142         /// </summary>
143         /// <param name="entity"></param>
144         public virtual void Add(T entity)
145         {
146             this.ValidateEntity(entity,ValidateMode.Add);
147             zbEntities.CreateObjectSet<T>().AddObject(entity);
148         }
149
150
151         /// <summary>
152         /// 增加实体列表
153         /// </summary>
154         /// <param name="entities"></param>
155         public virtual void AddList(IEnumerable<T> entities)
156         {
157             var objSet = zbEntities.CreateObjectSet<T>();
158             foreach (T entity in entities)
159             {
160                 this.ValidateEntity(entity, ValidateMode.Add);
161                 objSet.AddObject(entity);
162             }
163         }
164
165         /// <summary>
166         /// 更新已分离实体,若未分离则不需要执行该方法
167         /// </summary>
168         /// <param name="entity"></param>
169         public virtual void Update(T entity)
170         {
171             this.ValidateEntity(entity, ValidateMode.Update);
172             zbEntities.CreateObjectSet<T>().ApplyCurrentValues(entity);
173         }
174
175         /// <summary>
176         /// 删除实体
177         /// </summary>
178         /// <param name="entity"></param>
179         public virtual void Delete(T entity)
180         {
181             this.ValidateEntity(entity, ValidateMode.Delete);
182             zbEntities.CreateObjectSet<T>().DeleteObject(entity);
183         }
184
185         /// <summary>
186         /// 删除实体
187         /// </summary>
188         /// <param name="whereExpr"></param>
189         public virtual void Delete(Expression<Func<T, bool>> whereExpr)
190         {
191             var objSet = zbEntities.CreateObjectSet<T>();
192             T entity = objSet.Where(whereExpr).Single();
193             //this.ValidateEntity(entity, ValidateMode.Delete);
194             objSet.DeleteObject(entity);
195         }
196
197         /// <summary>
198         /// 删除实体列表
199         /// </summary>
200         /// <param name="entities"></param>
201         public virtual void DeleteList(IEnumerable<T> entities)
202         {
203             var objSet = zbEntities.CreateObjectSet<T>();
204             foreach (T entity in entities)
205             {
206                 //this.ValidateEntity(entity, ValidateMode.Delete);
207                 objSet.DeleteObject(entity);
208             }
209         }
210
211
212         /// <summary>
213         /// 提交保存所有变更操作
214         /// </summary>
215         public void SubmitSave()
216         {
217             zbEntities.SaveChanges();
218         }
219
220
221         /// <summary>
222         /// 验证
223         /// </summary>
224         /// <param name="entity"></param>
225         /// <returns></returns>
226         protected virtual void ValidateEntity(T entity,ValidateMode mode=ValidateMode.Add)
227         {
228
229         }
230
231         /// <summary>
232         /// 验证模式
233         /// </summary>
234         protected enum ValidateMode
235         {
236             Add=0,
237             Update=1,
238             Delete=-1
239         }
240
241     }
242 }

之所以声明为abstract,要求子类必需继承后才能正常使用,这里面有一个ValidateEntity方法,主用于子类在RUD前,验证实体对象数据完整性,可重写也可不重写!

更多IT相关资讯与技术文章,欢迎光临我的个人网站:http://www.zuowenjun.cn/

时间: 2024-10-12 03:02:28

EF封装类,供参考!的相关文章

Ubuntu 12.04 分区方案(仅供参考)

Ubuntu 12.04 分区方案(仅供参考) 总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap 交换空间 /boot 200M左右 100M ext4 Linux的内核及引导系统程序所需要的文件,比如 vmlinuz initrd.img文件都位于这个目录中.在一般情况下,GRUB或LILO系统引导管理器也位于这个目录:启动撞在文件存放位置,如kernels,initrd,grub. /tmp 5G左

四套写入方案(仅供参考)

四套写入方案 第一套:字节流读取写入方案 FileInputStream :字节流方式读取文本文件 FileOutputStream:字节流写入硬盘 第二套:字符流读取写入方案 FileReader:字符流读取文本 FileWriter:字符流写入文本 第三套: BufferedReader:自定义缓存大小 BufferedWriter:写入文本 一般和FileReader和FileWriter结合使用 第四套:可以读取二进制(img图片等 ) DataInputStream:将本地的img加载

信息与通信工程——重要国际学术会议和国际顶级期刊(仅供参考)

一.信息与通信工程的重要国际学术会议 主要包含两类: A类会议:本学科最顶尖级水平的国际会议: B类会议:学术水平较高.组织工作成熟.按一定时间间隔系列性召开的国际会议. A类会议(序号不表示优先顺序) 序号 / 英文名称 / 英文简称 / 中文名称 / 备注 1.IEEE International Conference on Acoustics, Speech and Signal Processing /  ICASAP /     IEEE 声学.语音和信号处理国际会议 2.IEEE I

Unity上一页下一页切换功能实现源码(仅供参考)

在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: using UnityEngine; using System.Collections; using UnityEngine.UI; public class PanoramaManager : MonoBehaviour { //图片存放数组 Texture2D[] arr; //下一张按钮计数索引 in

开发问题---数据库字段前出现“—”(保存留用,仅供参考)

开发时数据调用往往会用到占位符,然而刚开始使用很容易碰见sql语句在SQLServer中查询时显示"-",如下代码: #region 先判断是否有记录,再确定使用哪条命令 //查询数据库 20140713 commandText = "use zzbjcdzz select *" + "from [T_VillageBasicInfo] " + "where ltrim(rtrim([code]))='{0}' "; //注意

Django开发的简单CMDB系统(仅供参考)

自己基于django开发的一个简单机房机柜CMDB系统,仅供参考.欢迎在下面留言,提出修改意见. 可实现增删改查. 权限未做,很多功能都没做,只做一个最基本的,初学. 前端模板用的inspinia2.5,和jumpserver用的一样的模块,所以看着差不多.模板可自行百度搜索. 放到pycharm或者linux环境下,配置好,运行就可以. domo 登录:http://42.62.6.54:8001/index.html  ,默认用户名hequan,密码123456. 下载链接:http://p

如何有效防止DEDE织梦系统被挂木马安全设置(仅供参考)

尊敬的客户,您好!     感谢广大客户对我司工作的信任和支持!      我司在最近的一个多月内陆续发现多起因 DedeCMS 安全漏洞造成网站被上传恶意脚本的事件,入侵者可利用恶意脚本对外发送大量数据包,严重占用CPU资源与服务器带宽,影响极为恶劣.为保证服务稳定,即日起一旦发现网站存在此类恶意脚本,我们将立即暂停该网站的服务直到问题修复.如果您正在使用 DedeCMS,请立即检查是否已经存在恶意脚本,并更新程序到最新版本或应用相关补丁.     迄今为止,我们发现的恶意脚本文件有    

mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考

数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点. 请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https://823948977.docs.qq.com/T5e6dBYLoZz?opendocxfrom=tim 文章内容类似截图:

单相变频电源的功能特点--深圳市中港扬盛仅供参考

变频电源的种类分为单相和三相变频,其在电压及功率上都有不同的作用和特点.今天大家分享的是关于中港扬盛的单相变频电源的一些特点: 1.能够有效的抗干扰作用:比如通过Y/△接线的隔离后,就能够阻止一部分谐波的传输:2.能够阻抗变换作用:主要是增加系统阻抗,这样就能使保护装置等容易配合:3.能够稳定系统电压的作用:比如像在启动大负荷设备的时候,能够减少启动时大电流对系统电压的影响:4.能够防止系统接地的作用:当隔离负荷侧发生单相接地时,不会造成整个系统单相接地:5.能够降低短路电流:当负荷侧发生短路事