EF Dal通用类

一个通用的ef  dal处理类是非擦汗那个提高工作效率的

using System;

using System.Collections.Generic;

using System.Data.Entity.Infrastructure;

using System.Data.Entity.Migrations;

using System.Data.SqlClient;

using System.Linq;

using System.Linq.Expressions;

using System.Reflection;

using System.Text;

using AST.Models.Model;

using System.Data.Entity;

namespace AST.Models.IDal

{

public class BaseDAL<T> where T : class, new()

{

/// <summary>

/// 数据上下文对象

/// </summary>

public DBContextStu db = new DBContextStu();

public BaseDAL()

{

}

#region 1.0 新增 实体 +int Add(T model)

/// <summary>

/// 新增 实体

/// </summary>

/// <param name="model"></param>

/// <returns></returns>

public int Add(T model)

{

db.Set<T>().Add(model);

return db.SaveChanges(); //保存成功后,会将自增的id设置给 model的 主键属性,并返回受影响行数

}

#endregion

#region 2.0 根据 id 删除 +int Del(T model)

/// <summary>

/// 根据 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 3.0 根据条件删除 +int DelBy(Expression<Func<T, bool>> delWhere)

/// <summary>

/// 3.0 根据条件删除

/// </summary>

/// <param name="delWhere"></param>

/// <returns></returns>

public int DelBy(Expression<Func<T, bool>> delWhere)

{

//3.1查询要删除的数据

List<T> listDeleting = db.Set<T>().Where(delWhere).ToList();

//3.2将要删除的数据 用删除方法添加到 EF 容器中

listDeleting.ForEach(u =>

{

db.Set<T>().Attach(u); //先附加到 EF容器

db.Set<T>().Remove(u); //标识为 删除 状态

});

//3.3一次性 生成sql语句到数据库执行删除

return db.SaveChanges();

}

#endregion

#region 4.0 修改 +int Modify(T model, params string[] proNames)

/// <summary>

/// 4.0 修改,如:

/// T u = new T() { uId = 1, uLoginName = "asdfasdf" };

/// this.Modify(u, "uLoginName");

/// </summary>

/// <param name="model">要修改的实体对象</param>

/// <param name="proNames">要修改的 属性 名称</param>

/// <returns></returns>

public int Modify(T model)

{

//4.1将 对象 添加到 EF中

//DbEntityEntry entry = db.Entry<T>(model);

////4.2先设置 对象的包装 状态为 Unchanged

//entry.State = System.Data.Entity.EntityState.Unchanged;

////4.3循环 被修改的属性名 数组

//foreach (string proName in proNames)

//{

//    //4.4将每个 被修改的属性的状态 设置为已修改状态;后面生成update语句时,就只为已修改的属性 更新

//    entry.Property(proName).IsModified = true;

//}

//db.Set<T>().Attach(model);

db.Set<T>().AddOrUpdate(model);

//4.4一次性 生成sql语句到数据库执行

return db.SaveChanges();

}

#endregion

#region 4.0 批量修改 +int Modify(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedProNames)

/// <summary>

/// 4.0 批量修改

/// </summary>

/// <param name="model">要修改的实体对象</param>

/// <param name="whereLambda">查询条件</param>

/// <param name="proNames">要修改的 属性 名称</param>

/// <returns></returns>

public int ModifyBy(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedProNames)

{

//4.1查询要修改的数据

List<T> listModifing = db.Set<T>().Where(whereLambda).ToList();

//获取 实体类 类型对象

Type t = typeof(T); // model.GetType();

//获取 实体类 所有的 公有属性

List<PropertyInfo> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();

//创建 实体属性 字典集合

Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();

//将 实体属性 中要修改的属性名 添加到 字典集合中 键:属性名  值:属性对象

proInfos.ForEach(p =>

{

if (modifiedProNames.Contains(p.Name))

{

dictPros.Add(p.Name, p);

}

});

//4.3循环 要修改的属性名

foreach (string proName in modifiedProNames)

{

//判断 要修改的属性名是否在 实体类的属性集合中存在

if (dictPros.ContainsKey(proName))

{

//如果存在,则取出要修改的 属性对象

PropertyInfo proInfo = dictPros[proName];

//取出 要修改的值

object newValue = proInfo.GetValue(model, null); //object newValue = model.uName;

//4.4批量设置 要修改 对象的 属性

foreach (T usrO in listModifing)

{

//为 要修改的对象 的 要修改的属性 设置新的值

proInfo.SetValue(usrO, newValue, null); //usrO.uName = newValue;

}

}

}

//4.4一次性 生成sql语句到数据库执行

return db.SaveChanges();

}

#endregion

#region 5.0 根据条件查询 +List<T> GetListBy(Expression<Func<T,bool>> whereLambda)

/// <summary>

/// 5.0 根据条件查询 +List<T> GetListBy(Expression<Func<T,bool>> whereLambda)

/// </summary>

/// <param name="whereLambda"></param>

/// <returns></returns>

public List<T> GetListBy(Expression<Func<T, bool>> whereLambda)

{

return db.Set<T>().Where(whereLambda).ToList();

}

#endregion

#region 5.1 根据条件 排序 和查询 + List<T> GetListBy<TKey>

/// <summary>

/// 5.1 根据条件 排序 和查询

/// </summary>

/// <typeparam name="TKey">排序字段类型</typeparam>

/// <param name="whereLambda">查询条件 lambda表达式</param>

/// <param name="orderLambda">排序条件 lambda表达式</param>

/// <returns></returns>

public List<T> GetListBy<TKey>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderLambda)

{

return db.Set<T>().Where(whereLambda).OrderBy(orderLambda).ToList();

}

#endregion

#region 6.0 分页查询 + List<T> GetPagedList<TKey>

/// <summary>

/// 6.0 分页查询 + List<T> GetPagedList<TKey>

/// </summary>

/// <param name="pageIndex">页码</param>

/// <param name="pageSize">页容量</param>

/// <param name="whereLambda">条件 lambda表达式</param>

/// <param name="orderBy">排序 lambda表达式</param>

/// <returns></returns>

public List<T> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<T, bool>> whereLambda,

Expression<Func<T, TKey>> orderBy)

{

// 分页 一定注意: Skip 之前一定要 OrderBy

return

db.Set<T>()

.Where(whereLambda)

.OrderByDescending(orderBy)

.Skip((pageIndex - 1) * pageSize)

.Take(pageSize)

.ToList();

}

#endregion

}

}

----------------------------------

使用方法

namespace AST.Models.Dal

{

public class DalNavT : AST.Models.IDal.BaseDAL<NavT>{//只需要继承一下  如果想要进行自己的方法 可以自己在进行添加

//{

//    public DBContextStu dbS;

public DalNavT()

{

//dbS = base.db;

}

/// <summary>

/// NavT model,int PID

/// </summary>

/// <returns></returns>

public int AddORUpdate(NavT modelT, int PID)

{

NavF model=db.NavF.Single(u => u.ID == PID);

modelT.NavF = model;

modelT.NavF_ID = PID;

db.NavT.AddOrUpdate(modelT);

//Console.WriteLine(db.NavT.ToList().Count);

return db.SaveChanges();

}

}

}

时间: 2024-10-08 10:21:33

EF Dal通用类的相关文章

EF(Entity Framework)通用DBHelper通用类,增删改查以及列表

(1)通用类用法 其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo>(); 3 UserInfo userinfo = new UserInfo(); 4 userinfo.Name = "1"; 5 dbhelper.Add(userinfo); 6 7 //根据条件查找列表 8 var entityes = dbhelper.F

dal层通用类

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;using System.Data;using System.Reflection;using BaseLibrary; namespace DAL{ /// <summary> /// 通用类 /// </summary> public class commonH

.NET基础篇——Entity Framework 数据转换层通用类

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在实现基础的三层开发的时候,大家时常会在数据层对每个实体进行CRUD的操作,其中存在相当多的重复代码.为了减少重复代码的出现,通常都会定义一个共用类,实现相似的操作,下面为大家介绍一下Entity Framework时常用到的通用类.首先在数据

用DBContext (EF) 实现通用增删改查的REST方法

我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式介绍如何用DBContext来实现通用增删改查的REST方法,以及实现过程中容易出现的问题. 1. 打开vs2012,新建一个class library的项目 2. 新加一个ADO.NET Entity Data Model项到这个项目 3. 打开App.Config, 修改res://* 为res

关于在EF中通用方法

在EF中有时需要用到一些通用类,在后端模型和前端模型在某些场合需要模型分离, 例如数据模型和试图模型中用到的增删改功能 public class DBHelper<V, T>        where V : class ,new()        where T : class ,new()    { public Result Update(V Entity)        {            using (var db = new DbContext())            {

C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </sum

jQuery Ajax封装通用类 (linjq)

jQuery Ajax封装通用类 (linjq) $(function(){ /** * ajax封装 * url 发送请求的地址 * data 发送到服务器的数据,数组存储,如:{"date": new Date().getTime(), "state": 1} * async 默认值: true.默认设置下,所有请求均为异步请求.如果需要发送同步请求,请将此选项设置为 false. * 注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行. * t

poi导出excel通用类

一.关键的通用类public class PoiExportUtils {    private static HSSFWorkbook workBook; public PoiExportUtils(){        workBook = new HSSFWorkbook();    }        /**     * 创建sheet     * @param sheetName     * @param workBook     * @return     */    public st

PHP curl get post通用类

<?php /** * @author:xiaojiang * curl 通用方法 ..get /post 传送数据 */ class process{ const GET = 0; const POST = 1; public $url; public $ch = null; private $type = 1; public function __construct( $url , $type = self::POST){ $this->url = $url; $this->ch =