·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 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) {