zoukankan      html  css  js  c++  java
  • Entity Framework 泛型使用

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

      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

  • 相关阅读:
    Java并发编程:线程池的使用
    AlarmManager与PendingIntent
    ConnectivityManager与检查网络连接的使用
    IntentService的使用
    Service(Local Service)简介
    Looper、Hander、HandlerThread
    XML_PULL解析
    android AsyncTask 的使用(转载)
    android 连接网络的简单实例
    xml drawable
  • 原文地址:https://www.cnblogs.com/ljs0322/p/3791638.html
Copyright © 2011-2022 走看看