国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

EF 通用數據層父類方法小結

2019-11-17 01:55:45
字體:
來源:轉載
供稿:網友

EF 通用數據層父類方法小結

MSSql 數據庫 數據層 父類

增刪改查:

using System;using System.Collections.Generic;using System.Data;using System.Data.Entity;using System.Data.Entity.Infrastructure;using System.Linq;using System.Linq.ExPRessions;using System.Reflection;using System.Text;

namespace DAL{

   /// <summary>    /// MSSql 數據庫 數據層 父類    /// </summary>    /// <typeparam name="T"></typeparam>    public class BaseDAL<T> where T : class,new()    {        /// <summary>        /// EF 上下文對象        /// </summary>        DbContext db = new DBContextFactory().GetDbContext();
#region 1.0 新增實體,返回受影響的行數 +  int Add(T model)        /// <summary>        /// 1.0 新增實體,返回受影響的行數        /// </summary>        /// <param name="model"></param>        /// <returns>返回受影響的行數</returns>        public int Add(T model)        {            db.Set<T>().Add(model);            //保存成功后,會將自增的id設置給model的主鍵屬性,并返回受影響的行數。            return db.SaveChanges();        }        #endregion        #region 1.1 新增實體,返回對應的實體對象 + T AddReturnModel(T model)        /// <summary>        /// 1.1 新增實體,返回對應的實體對象        /// </summary>        /// <param name="model"></param>        /// <returns></returns>        public T AddReturnModel(T model)        {            db.Set<T>().Add(model);            db.SaveChanges();            return model;        }        #endregion
#region 2.0 根據id刪除 +  int Del(T model)        /// <summary>        /// 2.0 根據id刪除        /// </summary>        /// <param name="model">必須包含要刪除id的對象</param>        /// <returns></returns>        public int Del(T model)        {            db.Set<T>().Attach(model);            db.Set<T>().Remove(model);            return db.SaveChanges();        }        #endregion        #region 2.1 根據條件刪除 + int DelBy(Expression<Func<T, bool>> delWhere)        /// <summary>        /// 2.1 根據條件刪除        /// </summary>        /// <param name="delWhere"></param>        /// <returns>返回受影響的行數</returns>        public int DelBy(Expression<Func<T, bool>> delWhere)        {            //2.1.1 查詢要刪除的數據            List<T> listDeleting = db.Set<T>().Where(delWhere).ToList();            //2.1.2 將要刪除的數據 用刪除方法添加到 EF 容器中            listDeleting.ForEach(u =>                {                    db.Set<T>().Attach(u);  //先附加到EF 容器                    db.Set<T>().Remove(u); //標識為刪除狀態                });            //2.1.3 一次性生成sql語句 到數據庫執行刪除            return db.SaveChanges();        }        #endregion
#region 3.0 修改實體 +  int Modify(T model)        /// <summary>        /// 修改實體        /// </summary>        /// <param name="model"></param>        /// <returns></returns>        public int Modify(T model)        {            DbEntityEntry entry = db.Entry<T>(model);            entry.State = EntityState.Modified;            return db.SaveChanges();        }        #endregion        #region 3.1 修改實體,可修改指定屬性 + int Modify(T model, params string[] propertyNames)        /// <summary>        /// 3.1 修改實體,可修改指定屬性        /// </summary>        /// <param name="model"></param>        /// <param name="propertyName"></param>        /// <returns></returns>        public int Modify(T model, params string[] propertyNames)        {            //3.1.1 將對象添加到EF中            DbEntityEntry entry = db.Entry<T>(model);            //3.1.2 先設置對象的包裝狀態為 Unchanged            entry.State = EntityState.Unchanged;            //3.1.3 循環被修改的屬性名數組            foreach (string propertyName in propertyNames)            {                //將每個被修改的屬性的狀態設置為已修改狀態;這樣在后面生成的修改語句時,就只為標識為已修改的屬性更新                entry.Property(propertyName).IsModified = true;            }            return db.SaveChanges();        }        #endregion        #region 3.2 批量修改 + int ModifyBy(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedPropertyNames)        /// <summary>        /// 3.2 批量修改        /// </summary>        /// <param name="model"></param>        /// <param name="whereLambda"></param>        /// <param name="modifiedPropertyNames"></param>        /// <returns></returns>        public int ModifyBy(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedPropertyNames)        {            //3.2.1 查詢要修改的數據            List<T> listModifing = db.Set<T>().Where(whereLambda).ToList();            //3.2.2 獲取實體類類型對象            Type t = typeof(T);            //3.2.3 獲取實體類所有的公共屬性            List<PropertyInfo> propertyInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();            //3.2.4 創建實體屬性字典集合            Dictionary<string, PropertyInfo> dicPropertys = new Dictionary<string, PropertyInfo>();            //3.2.5 將實體屬性中要修改的屬性名 添加到字典集合中  鍵:屬性名  值:屬性對象            propertyInfos.ForEach(p =>                {                    if (modifiedPropertyNames.Contains(p.Name))                    {                        dicPropertys.Add(p.Name, p);                    }                });            //3.2.6 循環要修改的屬性名            foreach (string propertyName in modifiedPropertyNames)            {                //判斷要修改的屬性名是否在實體類的屬性集合中存在                if (dicPropertys.ContainsKey(propertyName))                {                    //如果存在,則取出要修改的屬性對象                    PropertyInfo proInfo = dicPropertys[propertyName];                    //取出要修改的值                    object newValue = proInfo.GetValue(model, null);                    //批量設置要修改對象的屬性                    foreach (T item in listModifing)                    {                        //為要修改的對象的要修改的屬性設置新的值                        proInfo.SetValue(item, newValue, null);                    }                }            }            //一次性生成sql語句 到數據庫執行            return db.SaveChanges();        }        #endregion
#region 4.0 根據條件查詢單個model + T GetModel(Expression<Func<T, bool>> whereLambda)        /// <summary>        /// 4.0 根據條件查詢單個model        /// </summary>        /// <param name="whereLambda"></param>        /// <returns></returns>        public T GetModel(Expression<Func<T, bool>> whereLambda)        {
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 土默特左旗| 周宁县| 阿鲁科尔沁旗| 宁河县| 林甸县| 监利县| 北票市| 永靖县| 瑞金市| 宁陕县| 毕节市| 乌恰县| 喀喇沁旗| 安康市| 五台县| 丰台区| 余干县| 沂源县| 兴安县| 确山县| 玉田县| 修文县| 将乐县| 怀宁县| 潼关县| 资溪县| 碌曲县| 临沂市| 揭东县| 日照市| 福贡县| 集安市| 巍山| 墨江| 宝鸡市| 涟源市| 连城县| 织金县| 平利县| 六枝特区| 星座|