/// <summary>
/// EF DAL CURD基类
/// </summary>
/// <typeparam name="T"></typeparam>
public class BaseDAL<T> where T : class, new()
{ /// <summary>
/// 上下文网关
/// </summary>
protected SchoolEntities db = new SchoolEntities(); #region 1.Add /// <summary>
/// 增加一条数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public T AddEntity(T entity)
{ db.Entry<T>(entity).State = EntityState.Added;
// db.Set<T>().Add(entity);此方法同上方法
db.SaveChanges();
return entity;//因为可能要返回自动增长的ID,所以把整个实体返回,否则可以直接返回bool。
}
/// <summary>
/// 同时增加多条数据到一张表(事务处理)
/// </summary>
/// <param name="entitys"></param>
/// <returns></returns>
public bool AddEntity(List<T> entitys)
{
foreach (var entity in entitys)
{
db.Entry<T>(entity).State = EntityState.Added;
}
// entitys.ForEach(c=>db.Entry<T>(c).State = EntityState.Added);//等价于上面的循环
return db.SaveChanges() > ;
}
#endregion #region 2.Modify
/// <summary>
/// 修改一条数据,会修改所有列的值,没有赋值的属性将会被赋予属性类型的默认值**************
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public bool ModifyEntity(T entity)
{
db.Set<T>().Attach(entity);
db.Entry<T>(entity).State = EntityState.Modified;//将所有属性标记为修改状态
return db.SaveChanges() > ;
}
/// <summary>
/// 修改一条数据,会修改指定列的值
/// </summary>
/// <param name="entity">要修改的实体对象</param>
/// <param name="proNames">要修改的属性名称</param>
/// <returns></returns>
public bool ModifyEntity(T entity, params string[] proNames)
{
db.Set<T>().Attach(entity);
DbEntityEntry<T> dbee = db.Entry<T>(entity);
dbee.State = EntityState.Unchanged;//先将所有属性状态标记为未修改
proNames.ToList().ForEach(c => dbee.Property(c).IsModified = true);//将要修改的属性状态标记为修改
return db.SaveChanges() > ;
}
/// <summary>
/// 根据条件批量修改指定的列********************
/// </summary>
/// <param name="entity"></param>
/// <param name="whereLambds"></param>
/// <param name="proNames"></param>
/// <returns></returns>
public bool ModifyEntity(T entity, Func<T, bool> whereLambds, params string[] proNames)
{
var entitys = db.Set<T>().Where(whereLambds).ToList();
PropertyInfo[] proinfos = entity.GetType().GetProperties();
List<PropertyInfo> list = new List<PropertyInfo>();
foreach (var p in proinfos)
{
if (proNames.Contains(p.Name))
{
list.Add(p);
}
}
entitys.ForEach(c => {
foreach (var p in list)
{
object value = p.GetValue(entity, null);
p.SetValue(c, value, null);
}
});
return db.SaveChanges() > ;
}
#endregion #region 3.Delete /// <summary>
/// 删除一个实体对象
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public bool DeleteEntity(T entity)
{
db.Set<T>().Attach(entity);
db.Entry<T>(entity).State = EntityState.Deleted;
return db.SaveChanges() > ;
}
/// <summary>
/// 根据条件批量删除实体对象
/// </summary>
/// <param name="whereLambds"></param>
/// <returns></returns>
public bool DeleteEntityByWhere(Func<T, bool> whereLambds)
{
var data = db.Set<T>().Where<T>(whereLambds).ToList();
return DeleteEntitys(data);
}
/// <summary>
/// 事务批量删除实体对象
/// </summary>
/// <param name="entitys"></param>
/// <returns></returns>
public bool DeleteEntitys(List<T> entitys)
{
foreach (var item in entitys)
{
db.Set<T>().Attach(item);
db.Entry<T>(item).State = EntityState.Deleted;
}
return db.SaveChanges() > ;
} #endregion #region 4.Select
//带条件查询
public IList<T> GetEntitys(Func<T, bool> whereLambds)
{
return db.Set<T>().Where<T>(whereLambds).ToList<T>();
}
//带排序查询
public IList<T> GetEntitys<S>(Func<T, bool> whereLambds, bool isAsc, Func<T, S> orderByLambds)
{
var temp = db.Set<T>().Where<T>(whereLambds);
if (isAsc)
{
return temp.OrderBy<T, S>(orderByLambds).ToList<T>();
}
else
{
return temp.OrderByDescending<T, S>(orderByLambds).ToList<T>();
}
}
//带分页查询
public IList<T> GetPagedEntitys<S>(int pageIndex, int pageSize, out int rows, out int totalPage, Func<T, bool> whereLambds, bool isAsc, Func<T, S> orderByLambds)
{
var temp = db.Set<T>().Where<T>(whereLambds);
rows = temp.Count();
if (rows % pageSize == )
{
totalPage = rows / pageSize;
}
else
{
totalPage = rows / pageSize + ;
}
if (isAsc)
{
temp = temp.OrderBy<T, S>(orderByLambds);
}
else
{
temp = temp.OrderByDescending<T, S>(orderByLambds);
}
temp = temp.Skip<T>(pageSize* (pageIndex - )).Take<T>(pageSize); return temp.ToList<T>();
}
//传统sql结合EF分页实现查询
public IList<T> GetPagedEntitys(int pageIndex, int pageSize, out int rows, out int totalPage, string sql, string where, bool isAsc, string orderKey)
{ sql = sql + " where 1=1 " + where;
sql += " order by " + orderKey;
if (!isAsc)
{
sql += " desc";
}
var temp = db.Database.SqlQuery<T>(sql);
rows = temp.Count();
if (rows % pageSize == )
{
totalPage = rows / pageSize;
}
else
{
totalPage = rows / pageSize + ;
} temp = temp.Skip(pageSize* (pageIndex - )).Take(pageSize);
return temp.ToList<T>(); ; }
#endregion #region 5.显式Tran
/// <summary>
/// 显式执行事务
/// </summary>
/// <param name="dics"></param>
/// <returns></returns>
public int ExeTran(IDictionary<string, DbParameter[]> dics)
{
int result = ;
DbConnection con = ((IObjectContextAdapter)db).ObjectContext.Connection;
using (DbTransaction tran = con.BeginTransaction())
{
try
{
//第一种,传统的执行事务的方法
//db.Database.ExecuteSqlCommand();
// db.Database.SqlQuery();
foreach (var dic in dics)
{
if (dic.Value != null)
{
result += db.Database.ExecuteSqlCommand(dic.Key, dic.Value);
}
else
{
result += db.Database.ExecuteSqlCommand(dic.Key, dic.Value);
} }
//第二种,
// db.UserInfo.Add(entity);
//db.UserInfo.Attach(entity);
//db. tran.Commit();
return result; }
catch (Exception ex)
{ tran.Rollback();
throw ex;
}
finally
{
con.Close();
}
}
}
#endregion
}

EF增删查改基类的更多相关文章

  1. EF增删查改加执行存储过程和sql语句,多种方法汇总

    ActionUrl c = new ActionUrl() { ActionName="test", RequestUrl="/123/123", SubTim ...

  2. EF增删查改(三)------终极版

    1.Add #region 1.1 新增学生信息(定义成Int类型,返回受影响的行数) /// <summary> /// 新增学生信息 /// </summary> /// ...

  3. MVC学习之路(1) EF 增删查改合集

    首先再Model中创建一个类[WMBlogDB] public class WMBlogDB : DbContext { //连接字符串. public WMBlogDB() : base(" ...

  4. Entity Framework(三)---FluentAPI和增删查改

    一.FluentAPI: 1.基本配置: namespace ConsoleApp14.ModelConfig { public class PersonConfig: EntityTypeConfi ...

  5. 3.EF 6.0 Code-First实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...

  6. 2015.8.2 jdbc实现商品类的增删查改

    在惠普济宁基地进行了两周sql和java的学习,学到很多东西 刚才实现了用jdbc访问数据库对数据库进行操作,是用eclipse写的,过几天移植到NetBeans上,个人还是比较习惯看图形化界面 前几 ...

  7. EF各版本增删查改及执行Sql语句

    自从我开始使用Visual Studio 也已经经历了好几个版本了,而且这中间EF等框架的改变也算是比较多的.本篇文章记录下各个版本EF执行Sql语句和直接进行增删查改操作的区别,方便自己随时切换版本 ...

  8. [课本]JDBC课程6--使用JDBC的DAO模块化--完成数据库的增删查改_工具类JDBCTools四个(Preparedstatement)功能模块的敲定版

    (课本P273-任务九) /**DAO: Data Access Object * 为什么用: 实现功能的模块化,更有利于代码的维护和升级 * 是什么: 访问数据信息的类,包含对数据的CRUD(cre ...

  9. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

随机推荐

  1. 剑指offer四十二之和为S的两个数字

    一.题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 二.思路 数列满足递增,设两个头尾两个指针i和j,若ai + ...

  2. shell脚本批量部署ssh

    日常运维工作中,需要给几十上百台服务器批量部署软件或者是重启服务器等操作, 这样大量重复性的工作一定很苦恼,本文给大家提供了最基本的批量操作的方法,虽然效率不高,对于初学者来说还是好理解.由于刚开始学 ...

  3. 简述ARP请求过程(同一子网和不同子网)

    1. 同一子网 主机A在准备构造链路层以太网帧头时,首先根据目的IP去查找ARP表,如果找到对应项,则直接得到目的MAC地址,如果没有查到才执行上面所说的ARP广播请求.这样做是为了最大限度地减少广播 ...

  4. django框架--cookie/session

    目录 一.http协议无状态问题 二.会话跟踪技术--cookie 1.对cookie的理解 2.cookie的使用接口 3.cookie的属性 4.使用cookie的问题 三.会话跟踪技术--ses ...

  5. (转)mysql5.7 根据二进制文件mysqlbinlog恢复数据库 Linux

    原文:http://blog.csdn.net/qq_15058425/article/details/61196085 1.开始mysqlbinlog日志功能 先找打my.cnf文件的位置: 2.编 ...

  6. Hadoop1.x集群安装部署(VMware)

    一.hadoop版本介绍 不收费的Hadoop版本主要有三个(均是国外厂商),分别是:Apache(最原始的版本,所有发行版均基于这个版本进行改进).Cloudera版本(Cloudera’s Dis ...

  7. Oracle中的层次查询详解

    1 语法格式 select [level], column, expr... from table [where condition] start with condition connect by ...

  8. LDAP落地实战(一):OpenLDAP部署及管理维护

    公司内部会有许多第三方系统或服务,例如Svn,Git,VPN,Jira,Jenkins等等,每个系统都需要维护一份账号密码以支持用户认证,当然公司也会有许多的主机或服务器,需要开放登录权限给用户登录使 ...

  9. vue 监听对象里的特定数据

    vue  监听对象里的特定数据变化 通常是这样写的,只能监听某一个特定数据 watch: { params: function(val) { console.log(val) this.$ajax.g ...

  10. php的304方式

    一般浏览器请求php是不会被缓存的,除非php直接显示的发送head 304 if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { $browserCache ...