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

 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) > );
} /// <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=-)
{
var result = zbEntities.CreateObjectSet<T>().Where(whereExpr).Select(selectExpr);
if (result != null && result.Count() > )
{
if (returnCount > )
{
if (orderDirection > )
{
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<=) pageNo=; if (recordCount > )
{
if (recordCount > pageSize)
{
if (orderDirection > )
{
return result.OrderByDescending(orderbyExpr).Skip((pageNo - ) * pageSize).Take(pageSize).ToList();
}
else
{
return result.OrderBy(orderbyExpr).Skip((pageNo - ) * pageSize).Take(pageSize).ToList();
}
}
else
{
if (orderDirection > )
{
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=,
Update=,
Delete=-
} }
}

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

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

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

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

    EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...

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

    在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...

  3. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  4. 为mutable类型的容器(array,set等)添加kvo,有点麻烦,供参考和了解下吧

    http://blog.csdn.net/caryaliu/article/details/49284185 需要在被观察的属性所在的类里面实现一些方法,对开发者不友好,一般不建议使用,这里mark一 ...

  5. configure错误列表供参考

    另外附一些常见的configure错误列表供参考: configure: error: No curses/termcap library found网上有的说法是:--with-named-curs ...

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

    Ubuntu 12.04 分区方案(仅供参考)   总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...

  7. VSS的运用小内容(针对于vs2008版本)(小的问题都是,仅供参考--只针对于菜鸟级的)

    自己开始接触vss 的时候有些小的习惯没有很好的养成,下面的有关VSS内容都是简单的迁入迁出的问题,(仅供参考) 1.文件的迁入迁出:(.txt..xlsx..doc) a:文件的覆盖问题: 对于文件 ...

  8. .NET平台下几种SOCKET模型的简要性能供参考

    转载自:http://www.cnblogs.com/asilas/archive/2006/01/05/311309.html .NET平台下几种SOCKET模型的简要性能供参考 这个内容在cnbl ...

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

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

随机推荐

  1. 21个高质量的Swift开源iOS App

    原文:21 Amazing Open Source iOS Apps Written in Swift 对Swift初学者来说,学习开源项目,阅读源码是个不错的方法.在这篇文章中,基于对代码质量和排名 ...

  2. quick -- 添加按钮

    cc.ui.UIPushButton.new({ normal = "comm_btnGreenBackBack.png", pressed = "comm_btnGre ...

  3. 互联网的寒冬来了,BAT都不社招了

    一 总理上次来到创业街,是四个月,要不就是五个月前了. 之后,全国创业形势一路走红,锣鼓喧天鞭炮齐鸣.大众创业万众创新,颇有大炼钢铁亩产万斤之势,尤其在媒体上. 再之后,2015 进入下半年,风投圈的 ...

  4. 修改maven一更新jre就变成1.5版本

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  5. 博为iHospital-HIS医院信息系统产品系列

    博为软件iHospital-HIS产品系列式面向大中型医院应用的完整医院流程信息化产品,覆盖了医院主要的业务流程,管理职能,和病人在医院诊疗的各个环节.将医院流程的优化与软件系统完美结合,为建立数字化 ...

  6. java代写

    Computer Science, Claremont McKenna CollegeCS51.2 - Introduction to Computer Science, Fall 2014Probl ...

  7. iOS开发——高级技术精选&底层开发之越狱开发第一篇

    底层开发之越狱开发第一篇 做越狱开发也有一些时间了,有很多东西想总结一下,希望给他人一些借鉴,也是自己对过去开发经历的一些总结.个人不推荐使用盗版,这里主要以技术介绍为主. 这个系列里面主要介绍怎样进 ...

  8. swift 如何删除subviews

    scrollView.subviews.map { (var view) -> () in if (view is UIButton) { view.removeFromSuperview() ...

  9. iOS开发 - AVPlayer实现流音频边播边存

    边播边下有三套左右实现思路,本文使用AVPlayer + AVURLAsset实现. 概述 1. AVPlayer简介 AVPlayer存在于AVFoundation中,可以播放视频和音频,可以理解为 ...

  10. Microsoft.CSharp.CSharpCodeProvider

    Microsoft.CSharp.CSharpCodeProvider MSDN 提供对 C# 代码生成器和代码编译器的实例的访问.类提供可用来检索 C# ICodeGenerator 和 ICode ...