因为增删改查是我们常用到的方法,我们不可能每个数据模型都去完成增删改查,这样的办法太笨拙了。我们可以写个父类(包含增删改查),然后让所有的数据模型类继承该父类。那就要求我们的父类必须使用泛型来实现。
class="code_img_closed" src="/Upload/Images/2014061623/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('0c479ac4-3628-4c82-b4e4-da67dca4a25d',event)" src="/Upload/Images/2014061623/2B1B950FA3DF188F.gif" alt="" />1 using System; 2 using System.Collections.Generic; 3 using System.Data.Entity.Infrastructure; 4 using System.Linq; 5 using System.Linq.Expressions; 6 using System.Reflection; 7 using System.Text; 8 using System.Threading.Tasks; 9 10 namespace ConsoleApplication1 11 { 12 /// <summary> 13 /// 定义泛型,必须规定T为类,不然db.Set<T>会报错 14 /// </summary> 15 /// <typeparam name="T"></typeparam> 16 class DALBase<T> where T:class 17 { 18 //因为我们要操作数据库,所以先实例化一个上下文 19 Model1Container db = new Model1Container(); 20 21 #region 添加方法 22 /// <summary> 23 /// 添加方法 24 /// </summary> 25 /// <param name="Model"></param> 26 public void add(T Model) 27 { 28 db.Set<T>().Add(Model); 29 db.SaveChanges(); 30 } 31 #endregion 32 33 #region 修改单个实体 34 /// <summary> 35 /// 修改单个实体 36 /// </summary> 37 /// <param name="Model"></param> 38 /// <param name="strs"></param> 39 public void update(T Model, params string[] strs) 40 { 41 DbEntityEntry entry = db.Entry<T>(Model); 42 entry.State = System.Data.EntityState.Unchanged; 43 foreach (string tempStr in strs) 44 { 45 entry.Property(tempStr).IsModified = true; 46 } 47 db.SaveChanges(); 48 } 49 #endregion 50 51 #region 批量修改,根据反射,稍微要复杂一些 52 /// <summary> 53 /// 批量修改,根据反射,稍微要复杂一些 54 /// </summary> 55 /// <param name="Model">将值存入属性中</param> 56 /// <param name="where">批量修改的条件</param> 57 /// <param name="strs">属性</param> 58 public void updateBatch(T Model, Expression<Func<T, bool>> where, params string[] strs) 59 { 60 //先根据条件查出符合要修改的集合 61 List<T> tempList = db.Set<T>().Where(where).ToList(); 62 //获取类型 63 Type t = typeof(T); 64 //利用反射获取T类型public属性集合 65 List<PropertyInfo> tempPro = t.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).ToList(); 66 Dictionary<string, PropertyInfo> propertyDic = new Dictionary<string, PropertyInfo>(); 67 //遍历T的所有属性,将符合修改的存入字典中 68 tempPro.ForEach(p => { if (strs.Contains(p.Name)) { propertyDic.Add(p.Name, p); } }); 69 //遍历要修改的属性 70 foreach (string str in strs) 71 { 72 if (propertyDic.ContainsKey(str)) 73 { 74 PropertyInfo propertyInfo = propertyDic[str]; 75 //获取要修改属性的值 76 object value = propertyInfo.GetValue(Model, null); 77 foreach (T tempData in tempList) 78 { 79 //设置值 80 propertyInfo.SetValue(tempData, value, null); 81 } 82 } 83 } 84 } 85 #endregion 86 87 #region 根据实体idcaozuo.html" target="_blank">删除操作 88 /// <summary> 89 /// 根据实体id删除操作 90 /// </summary> 91 /// <param name="Model"></param> 92 public void remove(T Model) 93 { 94 db.Set<T>().Attach(Model); 95 db.Set<T>().Remove(Model); 96 db.SaveChanges(); 97 } 98 #endregion 99 100 #region 根据条件删除操作 101 /// <summary> 102 /// 根据条件删除操作 103 /// </summary> 104 /// <param name="remWhere"></param> 105 public void removeByWhere(Expression<Func<T, bool>> remWhere) 106 { 107 List<T> tempList = db.Set<T>().Where(remWhere).ToList(); 108 tempList.ForEach(t => { db.Set<T>().Attach(t); db.Set<T>().Remove(t); }); 109 db.SaveChanges(); 110 } 111 #endregion 112 113 #region 一般带条件查询 114 /// <summary> 115 /// 一般带条件查询 116 /// </summary> 117 /// <param name="where"></param> 118 /// <returns></returns> 119 public List<T> getList(System.Linq.Expressions.Expression<Func<T, bool>> where) 120 { 121 return db.Set<T>().Where(where).ToList(); 122 } 123 #endregion 124 125 #region 带条件排序,页码页容量查询 126 /// <summary> 127 /// 带条件排序,页码页容量查询 128 /// </summary> 129 /// <typeparam name="TKey"></typeparam> 130 /// <param name="where"></param> 131 /// <param name="orderBy"></param> 132 /// <param name="pageSize"></param> 133 /// <param name="pageIndex"></param> 134 /// <returns></returns> 135 public List<T> getListOrder<TKey>(Expression<Func<T, bool>> where, Expression<Func<T, TKey>> orderBy, int pageSize, int pageIndex) 136 { 137 return db.Set<T>().Where(where).OrderBy(orderBy).Skip(pageIndex - 1).Take(pageSize).ToList(); 138 } 139 #endregion 140 } 141 }View Code
里面用到了反射,可能有些复杂,EF要告一段落了,下面开始记录mvc学习历程了。以后可能还会写个小项目,使用mvc+EF