EF泛型封装CRUD
来源:互联网 发布:mysql 字段数值累加 编辑:程序博客网 时间:2024/05/21 10:33
最近刚研究EF,自己做了几个增删改查例子之后,发现有好多代码是重复的,一般的重复代码我都会尝试去封装。
在这期间主要遇到的问题是查询或删除时需要主键,而泛型T 中根本无法事先知晓主键是那个,后来研究才知道这个地方可以先表达式,
即:Expression<Func<T, bool>> express
直接上代码
------------------------
添加数据:
/// <summary> /// 添加某一模型到数据中 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="model"></param> public int Add<T>(T model) where T : class { using (DBSetting db = new DBSetting()) { db.Set<T>().Add(model); return db.SaveChanges(); } }
修改数据:
/// <summary> /// 修改某一模型数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="model"></param> public void Modify<T>(T model) where T : class { using (DBSetting db = new DBSetting()) { if (db.Entry<T>(model).State == EntityState.Detached) { db.Set<T>().Attach(model); db.Entry<T>(model).State = EntityState.Modified; } db.SaveChanges(); } }
删除和批量删除:
/// <summary>/// Author: 严智远 Remark: 删除某一主键的相关信息 Date: 2013年7月2日11:00:12 /// </summary> /// <typeparam name="T">数据模型</typeparam> /// <param name="express">主键参数</param> public void Delete<T>(Expression<Func<T, bool>> express) where T : class { using (DBSetting db = new DBSetting()) { T v = db.Set<T>().SingleOrDefault(express); if (v == null) { return; } db.Set<T>().Remove(v); db.SaveChanges(); } } /// <summary> /// Author: 严智远 Remark: 批量删除信息 Date: 2013年7月2日13:30:11 /// </summary> /// <typeparam name="T">模型</typeparam> /// <param name="Ids">页面主键集合IEnumerable<string> Ids</param> /// <param name="express"></param> /// 调用方式: /// 1. List<string> lstId = Ids as List<string> ?? Ids.ToList(); /// 2. new PublicOP().DeleteLst<Main_Department>(m => lstId.Contains(m.DepartmentID)); public void DeleteLst<T>(Expression<Func<T, bool>> express) where T : class { using (DBSetting db = new DBSetting()) { db.Set<T>().Delete(express); } }
查询T或IEnumerable<T>:
/// <summary>/// Author: 严智远 Remark: 根据主键条件获取相关信息 Date: 2013年7月2日10:55:16 /// </summary> /// <typeparam name="T">数据模型</typeparam> /// <param name="express">主键参数</param> /// <returns></returns> public T GetInfo<T>(Expression<Func<T, bool>> express) where T : class { using (DBSetting db = new DBSetting()) { return db.Set<T>().SingleOrDefault(express); } } /// <summary> /// Author: 严智远 Remark: 根据参数1的条件获取相关信息 Date: 2013年7月2日10:52:57 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="express">参数条件</param> /// <returns></returns> public IEnumerable<T> GetInfoLst<T>(Expression<Func<T, bool>> express) where T : class { using (DBSetting db = new DBSetting()) { return db.Set<T>().Where(express).ToList(); } }
最后一个获取主键方法:(调用的时候注意,不能直接c=>c.字段=="值",而是要用主键如DepId=>DepId.DepId=="dep001",之所以这样是因为反射需要获取T中主键值)
/// <summary>/// 获取下一列主键的值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="model"></param> /// <param name="orderKey"></param> /// <param name="headName"></param> /// <returns></returns> public string GetNextKey<T>(Expression<Func<T, string>> express, string headName) where T : class { using (DBSetting db = new DBSetting()) { T v = db.Set<T>().OrderByDescending(express).FirstOrDefault(); if (v == null) { return headName + "0001"; } else { //通过反射获取主键 object obj = v.GetType().GetProperty(express.Parameters[0].Name).GetValue(v, null); //将字符剔除掉,仅剩余数字 int tempInt = Convert.ToInt32(obj.ToString().Replace(headName, "")); tempInt++; return "DEP" + tempInt.ToString("D4"); } } }
---------------
以上仅是个人封装的一些简单方法,当然还有更多更好的方法。
0 0
- EF泛型封装CRUD
- EF CRUD
- EF的CRUD
- MVC EF 修改 封装类 通用泛型方法
- EF架构封装类
- ef group 封装
- JDBC CRUD封装
- java-CRUD封装
- 【EF操作】——CRUD操作步骤
- EF封装类,供参考!
- MVC,EF 小小封装,mvcef封装
- PHP---对crud进行封装
- MyBatis工具:基础CRUD封装
- 封装jdbc的crud操作
- MVC中使用EF(2):实现基本的CRUD功能
- EF进阶篇(二)——CRUD
- EF AES Library 的封装类
- spring MongoDB 集成crud操作(简单封装)
- 极光推送的使用
- js 二级联动
- RabbitMQ3.5.0版本之后关于RabbitMQ实现队列优先级
- C#中几种常用的处理字符串的方法总结
- ArcGIS网络分析之构建网络分析数据集(一)
- EF泛型封装CRUD
- View滑动控制-----ViewDragHelper应用基础篇
- 【LeetCode】001 Nim Game 尼姆游戏
- Java 利用replaceAll 替换中括号
- event.keyCode用法及列表
- UITextView UITextField
- 高仿人人网客户端Android版项目源码
- Heroku创始人Adam Wiggins发布十二要素应用宣言——12factor
- java 静态代码块和构造方法执行优先顺序