首页 > 代码库 > EF封装类,供参考!
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 else117 {118 return result.OrderBy(orderbyExpr).Skip((pageNo - 1) * pageSize).Take(pageSize).ToList();119 }120 }121 else122 {123 if (orderDirection > 0)124 {125 return result.OrderByDescending(orderbyExpr).ToList();126 }127 else128 {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 ValidateMode235 {236 Add=0,237 Update=1,238 Delete=-1239 }240 241 }242 }
之所以声明为abstract,要求子类必需继承后才能正常使用,这里面有一个ValidateEntity方法,主用于子类在RUD前,验证实体对象数据完整性,可重写也可不重写!
更多IT相关资讯与技术文章,欢迎光临我的个人网站:http://www.zuowenjun.cn/
EF封装类,供参考!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。