EF---结合三层方法的应用
1 public class CustomerDAL
2 {
3 //数据库上下文对象
4 YYMMVCEntities db = new YYMMVCEntities();
5 /// <summary>
6 /// 新增操作
7 /// </summary>
8 public int Add(Customer customer)
9 {
10 db.Customers.AddObject(customer);
11 //保存成功后会将自增的ID设置成customer的主键属性
12 return db.SaveChanges();
13 }
14 //删除
15 public int DeleteBy(int cid)
16 {
17 Customer customer=new Customer(){CID = cid};
18 db.Customers.Attach(customer);
19 db.Customers.DeleteObject(customer);
20 return db.SaveChanges();
21 }
22 //根据条件删除
23 public int DeleteExpression(System.Linq.Expressions.Expression<Func<Customer,bool>> deleWhere)
24 {
25 List<Customer> customers=db.Customers.Where(deleWhere).ToList();
26 customers.ForEach(m=>db.Customers.DeleteObject(m));
27 return db.SaveChanges();
28 }
29
30 //修改方法
31 public int Modify(Customer customer)
32 {
33 db.Attach(customer);
34 db.ObjectStateManager.ChangeObjectState(customer, EntityState.Modified);
35 return db.SaveChanges();
36 }
37 //查询
38 publicList<Customer> GetListBy(System.Linq.Expressions.Expression<Func<Customer,bool>> seleWhere)
39 {
40 return db.Customers.Where(seleWhere).ToList();
41 }
42 //查询和排序
43 public List<Customer> GetListBy<Tkey>(System.Linq.Expressions.Expression<Func<Customer,bool>> seleWhere,System.Linq.Expressions.Expression<Func<Customer,Tkey>> orderWhere)
44 {
45 return db.Customers.Where(seleWhere).OrderBy(orderWhere).ToList();
46 }
47 //分页查询
48 public List<Customer> GetListPaged(int pageIndex,int pageSize,System.Linq.Expressions.Expression<Func<Customer,bool>> orderbyWhere)
49 {
50 return db.Customers.OrderBy(orderbyWhere).Skip((pageIndex - 1)*pageSize).Take(pageSize).ToList();
51 }
52 }
然后我们在DAL层新建一个BaseDAL类,类中内容是通过CustomerDAL修改而来的,将出现Customer的地方替换成了T,出现Customers的地方改成了CreateObjectSet<T>()
,修正后的类如下
1 public class BaseDAL<T> where T:class,new()
2 {
3 //数据库上下文对象
4 YYMMVCEntities db = new YYMMVCEntities();
5 /// <summary>
6 /// 新增操作
7 /// </summary>
8 public int Add(T customer)
9 {
10 //必须限定T的类型,只能为引用类型
11 db.CreateObjectSet<T>().AddObject(customer);
12 //保存成功后会将自增的ID设置成customer的主键属性
13 return db.SaveChanges();
14 }
15
16 //删除
17 public int DeleteBy(T model)
18 {
19
20 db.CreateObjectSet<T>().Attach(model);
21 db.CreateObjectSet<T>().DeleteObject(model);
22 return db.SaveChanges();
23 }
24 //根据条件删除
25 public int DeleteExpression(System.Linq.Expressions.Expression<Func<T, bool>> deleWhere)
26 {
27 List<T> customers = db.CreateObjectSet<T>().Where(deleWhere).ToList();
28 customers.ForEach(m => db.CreateObjectSet<T>().DeleteObject(m));
29 return db.SaveChanges();
30 }
31
32 //修改方法
33 public int Modify(T customer)
34 {
35 db.CreateObjectSet<T>().Attach(customer);
36 db.ObjectStateManager.ChangeObjectState(customer, EntityState.Modified);
37 return db.SaveChanges();
38 }
39
40 //查询
41 public List<T> GetListBy(System.Linq.Expressions.Expression<Func<T, bool>> seleWhere)
42 {
43 return db.CreateObjectSet<T>().Where(seleWhere).ToList();
44 }
45 //查询和排序
46 public List<T> GetListBy<Tkey>(System.Linq.Expressions.Expression<Func<T, bool>> seleWhere, System.Linq.Expressions.Expression<Func<T, Tkey>> orderWhere)
47 {
48 return db.CreateObjectSet<T>().Where(seleWhere).OrderBy(orderWhere).ToList();
49 }
50 //分页查询
51 public List<T> GetListPaged(int pageIndex, int pageSize, System.Linq.Expressions.Expression<Func<T, bool>> orderbyWhere)
52 {
53 return db.CreateObjectSet<T>().OrderBy(orderbyWhere).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
54
55 }
56 }
EF---结合三层方法的应用的更多相关文章
- 改善EF代码的方法(下)
本节,我们将介绍一些改善EF代码的方法,包括编译查询.存储模型视图以及冲突处理等内容. > CompiledQuery 提供对查询的编译和缓存以供重新使用.当相同的查询需要执行很多遍的时候,那么 ...
- C#学习-EF在三层中使用
1.搭建普通三层 DAL层,BLL层,Model层,Web层: DAL层引用Model层 BLL层引用DAL层和Model层 Web层引用BLL层和Model层 2.实现EF三层的搭建(添加引用,修改 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- EF 底层基础方法
1 using System; 2 using System.Data; 3 using System.Collections.Generic; 4 using System.Data.Entity; ...
- EF结合三层:三层中数据层父类和业务层父类的使用
今天我们主要讨论下数据层父类和业务层父类的使用.众所周知,数据层无非就是实现增删改查的方法.无论是哪个实体类,无非就是为了实现增删改查方法,所有我们在三层的DAL层封装了一个BaseDAL类,来做增删 ...
- Entity Framework SqlFunctions 教你如何在EF调用sqlserver方法的函数存根
今天算是研究了一天的SqlFunctions,请教了几个群的牛人,居然发现大伙对这个都比较陌生, 有的甚至直指EF中是不能调用sqlserver里的方法的. 因为之前搞过linq to sql 里面的 ...
- 改善EF代码的方法(上)
本节,我们将介绍一些改善EF代码的相关方法,如NoTracking,GetObjectByKey, Include等. > MergeOption.NoTracking 当我们只需要读取某些数据 ...
- 【.NET-EF】Entity Framework学习笔记1 - VS2013没有EF的解决方法
解决方法:我本来也没有,百度了一下,在C:\ProgramData\Package Cache\{08AEF86A-1956-4846-B906-B01350E96E30}v12.0.20912.0\ ...
- Entity Framework 学习高级篇1—改善EF代码的方法(上)
本节,我们将介绍一些改善EF代码的相关方法,如NoTracking,GetObjectByKey, Include等. l MergeOption.NoTracking 当我们只需要读 ...
- EF 底层封装方法(供参考)
闲暇之余,整理了一下EF底层的一些基础方法,供查看,只有接口,具体实现需要你们自己写了. 建议:接口的实现定义为虚方法,当父类的方法不满住子类需求时,可以重写此方法 此接口都为公用方法,基本上满足小系 ...
随机推荐
- ubuntu 添加启动器
终于搞定了安卓开发环境,不知道折腾了多少次,多少个IDE,解决了一个问题,又冒出一个问题.烦死了,最后关头,都快放弃了,重启电脑,打开 android stuio 编译运行居然陈宫了,没有报错,why ...
- BI测试工具之跨数据库数据对比,支持oracle,sqlserver
应用场景: 本周在进行SIT,我帮助仅有的一个测试妹妹对部分表进行数据质量验证,第一步需要做的就是比对source与stage表的table definition 与 数据内容的一致性. 本项目使用的 ...
- OpenStack三个节点icehouse-gre模式部署
一.环境准备 1.架构 创建3台虚拟机,分别作为controll节点.network节点和compute1节点. Controller节点:1processor,2G memory,5G storag ...
- uva 725 division(水题)——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABVMAAAOHCAIAAAClwESxAAAgAElEQVR4nOydybGturJFcQEPfgQu4A
- shell script 学习笔记-----shell变量
1.在赋值语句name=value中不能存在空格,例如:name = value这样的形式会被认为是三个变量,因为本质上来说,脚本的内容就是传给shell程序的变量,而变量之间是通过空格区分的.如果想 ...
- 【软件使用】用IntelliJ IDEA开发Android程序图解
博主这里使用的最新的14.0.3版本,下载地址:http://www.jetbrains.com/idea/, 下载后直接安装就可以了. 环境: OS:Win 8 IDE:IntelliJ IDEA ...
- JAVA基础之对象的初始化
本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及 final 关键字对初始化的影响.另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初 ...
- Codeforces Round #FF/#255 D DZY Loves Modification --贪心+优先队列
题意:给你一个矩阵,每次选某一行或者某一列,得到的价值为那一行或列的和,然后该行每个元素减去p.问连续取k次能得到的最大总价值为多少. 解法: 如果p=0,即永远不减数,那么最优肯定是取每行或每列那个 ...
- Tarjian算法求强联通分量
如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.强连通图有向图的极大强连通子图,称为强连通分量(strong ...
- Mecanim的Retargeting和BodyMask
Retargeting(动画重定向) 文档 http://game.ceeger.com/Manual/Retargeting.html 介绍 Mecanim 的最强大的功能之一,重定目标的仿人机器人 ...