码迷,mamicode.com
首页 > 其他好文 > 详细

Entity Framework 泛型使用

时间:2014-06-17 13:47:00      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

因为增删改查是我们常用到的方法,我们不可能每个数据模型都去完成增删改查,这样的办法太笨拙了。我们可以写个父类(包含增删改查),然后让所有的数据模型类继承该父类。那就要求我们的父类必须使用泛型来实现。

bubuko.com,布布扣
  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 根据实体id删除操作
 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

Entity Framework 泛型使用,布布扣,bubuko.com

Entity Framework 泛型使用

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/ljs0322/p/3791638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!