public class BaseDAL{string strConn = "";public BaseDAL(string connString){strConn = connString;}#region 通用增删改查#region 非原始sql语句方式/// <summary>/// 新增/// </summary>/// <param name="entity">实体</param>/// <returns>返回受影响行数</returns>public bool Add<T>(T entity) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){db.Entry<T>(entity).State = EntityState.Added;return db.SaveChanges() > 0;}}/// <summary>/// 改动/// </summary>/// <param name="entity">实体</param>/// <returns>返回受影响行数</returns>public bool Update<T>(T entity) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){db.Set<T>().Attach(entity);db.Entry<T>(entity).State = EntityState.Modified;return db.SaveChanges() > 0;}}/// <summary>/// 删除/// </summary>/// <param name="entity">实体</param>/// <returns>返回受影响行数</returns>public bool Delete<T>(T entity) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){db.Set<T>().Attach(entity);db.Entry<T>(entity).State = EntityState.Deleted;return db.SaveChanges() > 0;}}/// <summary>/// 依据条件删除/// </summary>/// <param name="deleWhere">删除条件</param>/// <returns>返回受影响行数</returns>public bool DeleteByConditon<T>(Expression<Func<T, bool>> deleWhere) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){List<T> entitys = db.Set<T>().Where(deleWhere).ToList();entitys.ForEach(m => db.Entry<T>(m).State = EntityState.Deleted);return db.SaveChanges() > 0;}}/// <summary>/// 查找单个/// </summary>/// <param name="id">主键</param>/// <returns></returns>public T GetSingleById<T>(int id) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return db.Set<T>().Find(id);}}/// <summary>/// 查找单个/// </summary>/// <param name="seleWhere">查询条件</param>/// <returns></returns>public T GetSingle<T>(Expression<Func<T, bool>> seleWhere) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return db.Set<T>().AsExpandable().FirstOrDefault(seleWhere);}}/// <summary>/// 获取全部实体集合/// </summary>/// <returns></returns>public List<T> GetAll<T>() where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return db.Set<T>().AsExpandable().ToList<T>();}}/// <summary>/// 获取全部实体集合(单个排序)/// </summary>/// <returns></returns>public List<T> GetAll<T, Tkey>(Expression<Func<T, Tkey>> orderWhere, bool isDesc) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return CommonSort(db.Set<T>().AsExpandable(), orderWhere, isDesc).ToList<T>();}}/// <summary>/// 获取全部实体集合(多个排序)/// </summary>/// <returns></returns>public List<T> GetAll<T>(params OrderModelField[] orderByExpression) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return CommonSort(db.Set<T>().AsExpandable(), orderByExpression).ToList();}}/// <summary>/// 单个排序通用方法/// </summary>/// <typeparam name="Tkey">排序字段</typeparam>/// <param name="data">要排序的数据</param>/// <param name="orderWhere">排序条件</param>/// <param name="isDesc">是否倒序</param>/// <returns>排序后的集合</returns>public IQueryable<T> CommonSort<T, Tkey>(IQueryable<T> data, Expression<Func<T, Tkey>> orderWhere, bool isDesc) where T : class{if (isDesc){return data.OrderByDescending(orderWhere);}else{return data.OrderBy(orderWhere);}}/// <summary>/// 多个排序通用方法/// </summary>/// <typeparam name="Tkey">排序字段</typeparam>/// <param name="data">要排序的数据</param>/// <param name="orderWhereAndIsDesc">字典集合(排序条件,是否倒序)</param>/// <returns>排序后的集合</returns>public IQueryable<T> CommonSort<T>(IQueryable<T> data, params OrderModelField[] orderByExpression) where T : class{//创建表达式变量參数var parameter = Expression.Parameter(typeof(T), "o");if (orderByExpression != null && orderByExpression.Length > 0){for (int i = 0; i < orderByExpression.Length; i++){//依据属性名获取属性var property = typeof(T).GetProperty(orderByExpression[i].PropertyName);//创建一个訪问属性的表达式var propertyAccess = Expression.MakeMemberAccess(parameter, property);var orderByExp = Expression.Lambda(propertyAccess, parameter);string OrderName = "";if (i > 0){OrderName = orderByExpression[i].IsDESC ? "ThenByDescending" : "ThenBy";}elseOrderName = orderByExpression[i].IsDESC ? "OrderByDescending" : "OrderBy";MethodCallExpression resultExp = Expression.Call(typeof(Queryable), OrderName, new Type[] { typeof(T), property.PropertyType },data.Expression, Expression.Quote(orderByExp));data = data.Provider.CreateQuery<T>(resultExp);}}return data;}/// <summary>/// 依据条件查询实体集合/// </summary>/// <param name="seleWhere">查询条件 lambel表达式</param>/// <returns></returns>public List<T> GetList<T>(Expression<Func<T, bool>> seleWhere) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return db.Set<T>().AsExpandable().Where(seleWhere).ToList();}}/// <summary>/// 依据条件查询实体集合/// </summary>/// <param name="seleWhere">查询条件 lambel表达式</param>/// <returns></returns>public List<T> GetList<T, TValue>(Expression<Func<T, TValue>> seleWhere, IEnumerable<TValue> conditions) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return db.Set<T>().AsExpandable().WhereIn<T, TValue>(seleWhere, conditions).ToList();}}/// <summary>/// 依据条件查询实体集合(单个字段排序)/// </summary>/// <param name="seleWhere">查询条件 lambel表达式</param>/// <returns></returns>public List<T> GetList<T, Tkey>(Expression<Func<T, bool>> seleWhere, Expression<Func<T, Tkey>> orderWhere, bool isDesc) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderWhere, isDesc).ToList();}}/// <summary>/// 依据条件查询实体集合(多个字段排序)/// </summary>/// <param name="seleWhere">查询条件 lambel表达式</param>/// <returns></returns>public List<T> GetList<T>(Expression<Func<T, bool>> seleWhere, params OrderModelField[] orderByExpression) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderByExpression).ToList();}}/// <summary>/// 获取分页集合(无条件无排序)/// </summary>/// <returns></returns>public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, out int totalcount) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){totalcount = db.Set<T>().AsExpandable().Count();//获取总数//须要添加AsExpandable(),否则查询的是全部数据到内存,然后再排序  AsExpandable是linqkit.dll中的方法return db.Set<T>().AsExpandable().Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();}}/// <summary>/// 获取分页集合(无条件单个排序)/// </summary>/// <returns></returns>public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, Expression<Func<T, Tkey>> orderWhere, bool isDesc, out int totalcount) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){totalcount = db.Set<T>().AsExpandable().Count();//获取总数//须要添加AsExpandable(),否则查询的是全部数据到内存。然后再排序  AsExpandable是linqkit.dll中的方法return CommonSort(db.Set<T>().AsExpandable(), orderWhere, isDesc).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();}}/// <summary>/// 获取分页集合(无条件多字段排序)/// </summary>/// <returns></returns>public List<T> GetListPaged<T>(int pageIndex, int pageSize, out int totalcount, params OrderModelField[] orderByExpression) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){totalcount = db.Set<T>().AsExpandable().Count();//获取总数//须要添加AsExpandable(),否则查询的是全部数据到内存,然后再排序  AsExpandable是linqkit.dll中的方法return CommonSort(db.Set<T>().AsExpandable(), orderByExpression).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();}}/// <summary>/// 获取分页集合(有条件无排序)/// </summary>/// <returns></returns>public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere, out int totalcount) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//获取总数//须要添加AsExpandable(),否则查询的是全部数据到内存。然后再排序  AsExpandable是linqkit.dll中的方法return db.Set<T>().AsExpandable().Where(seleWhere).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();}}/// <summary>/// 获取分页集合(有条件单个排序)/// </summary>/// <returns></returns>public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere,Expression<Func<T, Tkey>> orderWhere, bool isDesc, out int totalcount) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//获取总数//须要添加AsExpandable(),否则查询的是全部数据到内存。然后再排序  AsExpandable是linqkit.dll中的方法return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderWhere, isDesc).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();}}/// <summary>/// 获取分页集合(有条件多字段排序)/// </summary>/// <returns></returns>public List<T> GetListPaged<T>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere,out int totalcount, params OrderModelField[] orderModelFiled) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//获取总数//须要添加AsExpandable(),否则查询的是全部数据到内存,然后再排序  AsExpandable是linqkit.dll中的方法return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderModelFiled).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();}}#endregion#region 原始sql操作/// <summary>/// 运行操作/// </summary>/// <param name="sql"></param>/// <param name="paras"></param>public void ExecuteSql(string sql, params object[] paras){using (SysDb db = new SysDb(strConn)){db.Database.ExecuteSqlCommand(sql, paras);}}/// <summary>/// 查询列表/// </summary>/// <typeparam name="T"></typeparam>/// <param name="sql"></param>/// <param name="paras"></param>/// <returns></returns>public List<T> QueryList<T>(string sql, params object[] paras) where T : class{using (SysDb db = new SysDb(strConn)){return db.Database.SqlQuery<T>(sql, paras).ToList();}}/// <summary>/// 查询单个/// </summary>/// <typeparam name="T"></typeparam>/// <param name="sql"></param>/// <param name="paras"></param>/// <returns></returns>public T QuerySingle<T>(string sql, params object[] paras) where T : class{using (SysDb<T> db = new SysDb<T>(strConn)){return db.Database.SqlQuery<T>(sql, paras).FirstOrDefault();}}/// <summary>/// 运行事务/// </summary>/// <param name="lsSql"></param>/// <param name="lsParas"></param>public void ExecuteTransaction(List<String> lsSql, List<Object[]> lsParas){using (SysDb db = new SysDb(strConn)){using (var tran = db.Database.BeginTransaction()){try{for (int i = 0; i < lsSql.Count; i++){if (lsParas != null && lsParas.Count > 0){db.Database.ExecuteSqlCommand(lsSql[i], lsParas[i]);}}foreach (String item in lsSql){db.Database.ExecuteSqlCommand(item);}tran.Commit();}catch (Exception ex){tran.Rollback();throw ex;}}}}#endregion#endregion#region 通用属性/// <summary>/// 获取数据库server当前时间。/// </summary>public DateTime ServerTime{get{using (SysDb db = new SysDb(strConn)){String sql = "SELECT GETDATE()";Object objServerTime = db.Database.SqlQuery<Object>(sql);return Convert.ToDateTime(objServerTime);}}}/// <summary>/// 获取数据库版本号。/// </summary>public String DatabaseVersion{get{using (SysDb db = new SysDb(strConn)){try{String sql = "SELECT Version FROM Sys_Version";Object objServerTime = db.Database.SqlQuery<Object>(sql);return Convert.ToString(objServerTime);}catch{}return String.Empty;}}}#endregion}public static class QueryableExtension{/// <summary>/// 扩展方法  支持 in 操作/// </summary>/// <typeparam name="TEntity">须要扩展的对象类型</typeparam>/// <typeparam name="TValue">in 的值类型</typeparam>/// <param name="source">须要扩展的对象</param>/// <param name="valueSelector">值选择器 比如c=>c.UserId</param>/// <param name="values">值集合</param>/// <returns></returns>public static IQueryable<TEntity> WhereIn<TEntity, TValue>(this IQueryable<TEntity> source, Expression<Func<TEntity, TValue>> valueSelector,IEnumerable<TValue> values){if (null == valueSelector) { throw new ArgumentNullException("valueSelector"); }if (null == values) { throw new ArgumentNullException("values"); }ParameterExpression p = valueSelector.Parameters.Single();if (!values.Any()){return source;}var equals = values.Select(value => (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue))));var body = equals.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal));return source.Where(Expression.Lambda<Func<TEntity, bool>>(body, p));}}public struct OrderModelField{public bool IsDESC { get; set; }public string PropertyName { get; set; }}

dbcontext类:

    public class SysDb : DbContext{bool isNew = true;//是否是新的sql运行string strMsg = "";//sql运行的相关信息string strConn = "";//数据库连接字符串string UserName = "";//日志username称string AdditionalInfo = "";//日志额外信息public SysDb(string connString) : // 数据库链接字符串base(connString){strConn = connString;Database.SetInitializer<SysDb>(null);//设置为空,防止自己主动检查和生成base.Database.Log = (info) => Debug.WriteLine(info);}public SysDb(string connString, string logUserName, string logAdditionalInfo) : // 数据库链接字符串base(connString){strConn = connString;Database.SetInitializer<SysDb>(null);//设置为空,防止自己主动检查和生成UserName = logUserName;AdditionalInfo = logAdditionalInfo;base.Database.Log = AddLogger;}protected override void OnModelCreating(DbModelBuilder modelBuilder){//去掉复数映射modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();base.OnModelCreating(modelBuilder);}/// <summary>/// 加入日志/// </summary>/// <param name="info"></param>public void AddLogger(string info){if (info != "\r\n" && (!info.Contains("Sys_EventLog"))){string strTemp = info.ToUpper().Trim();if (isNew){//记录增删改if (strTemp.StartsWith("INSERT") || strTemp.StartsWith("UPDATE") || strTemp.StartsWith("DELETE")){strMsg = info;isNew = false;}}else{if (strTemp.StartsWith("CLOSED CONNECTION")){//添加新日志using (SysDb db = new SysDb(strConn)){try{//保存日志到数据库或其它地方}catch (Exception ex){using (System.IO.StreamWriter sw = new System.IO.StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "//logError.txt")){sw.Write(ex.Message);sw.Flush();}}}//清空strMsg = "";isNew = true;}else{strMsg += info;}}}}}public class SysDb<T> : SysDb where T : class{public SysDb(string connString) : // 数据库链接字符串base(connString){Database.SetInitializer<SysDb<T>>(null);//设置为空。防止自己主动检查和生成}public SysDb(string connString, string logUserName, string logAdditionalInfo) : // 数据库链接字符串base(connString,logUserName,logAdditionalInfo){Database.SetInitializer<SysDb<T>>(null);//设置为空。防止自己主动检查和生成}public DbSet<T> Entities { get; set; }}

界面使用:(bll层忽略)

 public class BusinessController : Controller{//// GET: /Jygl/Business/BaseBLL basebll = new BaseBLL(WebHelper.Conn);public ActionResult GetXMList(int page,int rows){int count = 0;//查询条件//Expression<Func<JY_XM, bool>> searchPredicate = PredicateBuilder.True<JY_XM>();//searchPredicate = searchPredicate.And(c => c.UserName.Contains(""));Expression<Func<JY_XM, int>> keySelector = u => u.UID;string str = ExceptionHelper<JY_XM>.TryCatchPageQueryJson<int>(basebll.GetListPaged, page, rows, keySelector, false, out count);return Content(str); }[HttpPost]public ActionResult XMEdit(JY_XM jyxm){basebll.Add(jyxm);return View();}public ActionResult GetAllGCLB(){List<DICT_GCLB> lsGCLB = basebll.GetAll<DICT_GCLB>();DICT_GCLB dicNew=new DICT_GCLB();dicNew.GCLBText="-请选择-";dicNew.GCLBId=0;lsGCLB.Add(dicNew);return Content(WebHelper.Json(lsGCLB));}public ActionResult GetAllArea(){List<DICT_Area> lsArea = basebll.GetAll<DICT_Area>();DICT_Area dicNew=new DICT_Area();dicNew.AreaText="-请选择-";dicNew.AreaId=0;lsArea.Add(dicNew);return Content(WebHelper.Json(lsArea));}}

个人原创。欢迎转载,尊重劳动成果,引用注明来源。

http://blog.csdn.net/laokaizzz/article/details/25730813



版权声明:本文博客原创文章,博客,未经同意,不得转载。

entity framework 6 我写了一个公用数据类相关推荐

  1. 无聊写的一个PHP Socket类

    无聊写的一个PHP Socket类,功能还比较简单,不完善. <?php /** *//***      * @project:socket类      * @license:GPL       ...

  2. 我写了一个java实体类,implements了Serializable接口,然后我如何让serialversionUID自动生成...

    写了一个java实体类,implements了Serializable接口,让serialversionUID自动生成方法: 1.点击类旁边的警告符号: 2.选择Add generated seria ...

  3. Entity Framework 6三层架构入门:创建数据访问层DAL

    回顾 上次我们讲到了Model的创建,现在来了解什么是DAL. DAL是针对Model的访问,可以这么说,Model是项目的逻辑操作对象,DAL就是最基本的方法:DAL直接访问数据库.也就是说,该层的 ...

  4. aspose 转pdf表格大小乱了_自己写了一个小工具类:pdf转word,没有页数和大小限制,保真!...

    昨天下午遇到一个问题,想把一个比较大的pdf转化为word,结果使用了各种工具都收费.想着干脆写一个小工具吧,一开始使用的python等等试了好几个网上的代码,结果全都失真.于是乎不得不花了一下午自己 ...

  5. 我写的一个 C++ 复数类

    我的C++ 的基础一直都不太扎实,最近有点空闲时间,找了本 C++ Primer 仔细的读了读.看完运算符重载那一章时,就想到写个复数类来练一练手. 实际上 C++ 中是有复数类的,而且还是个模版类, ...

  6. 今天工作的效率不高,才写了一个打印管理类

    整个下午昏昏沉沉的,很想睡觉,可能是因为昨天晚上看"<龙刀奇缘>"看的太晚了:这布电影还不错,可惜情节太简单了点:这里贴个介绍,有兴趣的可以看看: 中文名称:龙刀奇缘 ...

  7. 同事写了一个疯狂的类构造器,我要疯了,Builder 模式都不会么?!!

    疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...

  8. 小程序购物车的逻辑,写的一个假数据

    //Page Object 小程序的购物车逻辑 Page({ data: { cartItems: [], hasList: false,//列表是否有数据 total: 0, checkAll: t ...

  9. java输出横纵坐标点_java编程 知道坐标求三角形 做了一部分题目要求写出一个Point(点)类,该类具有x,y(表示点的横、纵坐标)两个属...

    共回答了11个问题采纳率:100% package aaa; public class Triangle { private Line line1; private Line line2; priva ...

最新文章

  1. Oracle CEO狂妄而真实的演讲
  2. 如何构建可视化的营销数据大屏?
  3. Eclipse连接MySQL数据库(傻瓜篇)
  4. c#如何通过ftp上传文件_ftp自动上传文件,如何设置ftp自动上传文件及环境配置...
  5. mongodb系列01--基础篇
  6. NOI入门级:算法之动态规划
  7. Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小
  8. pytorch Tensor autograd functions
  9. Java String类的相关操作
  10. Python序列之字符串
  11. Android 微信登陆的坑
  12. android LBS模式,android: 如何开启webview的LBS功能
  13. 1984-1999:中国电影的黄金十五年
  14. 基于Ant Design 和 jQuery UI 的表单设计器
  15. 计算机导论11.29课后总结
  16. 写在觉醒时 埋葬过去的堕落
  17. 解决公司无法访问自建的网站问题
  18. RecyclerView 梳理:点击amp;长按事件、分割线、拖曳排序、滑动删除
  19. 博力扬LED大屏专用光纤收发器千兆单模单纤兼容诺瓦灵星雨德普达中德等
  20. Python基础语法(五)—— 文件基本操作(打开、写入、关闭、查找)

热门文章

  1. 深度学习近似建模,助力飞越「维数灾难」温度场
  2. AI已经会刷LeetCode了
  3. MIT开发AI新工具,替设计师“省材料钱”:支持实时预览、兼容CAD软件丨开源...
  4. 皮猜按下谷歌招聘暂停键,疫情之下,「紧日子」来了
  5. 朱俊彦团队提出GAN压缩算法:计算量减少20倍,生成效果不变,GPU、CPU统统能加速...
  6. 华为麒麟990发布!余承东:全球首款旗舰5G SoC,业界最强手机AI算力,友商还都是PPT...
  7. 全国“最高”的视觉竞赛,华为Atlas打通遥感图像智能分析任督二脉
  8. Java动态代理与Cglib代理
  9. 面试遇到基础问题总结
  10. nginx同域名代理tomcat不同目录下的文件