博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.Net MVC OA项目笔记<二>
阅读量:5960 次
发布时间:2019-06-19

本文共 5999 字,大约阅读时间需要 19 分钟。

1.1.0 创建数据层

1.1.1 CZBK.ItcastOA.IDAL 引用 CZBK.ItcastOA.Model

1.2.1 给IDAL添加一个接口IUserInfoDal

         里面写增删改查分页的接口方法

public interface IUserInfoDal    {        //查        IQueryable
LoadEntities(System.Linq.Expressions.Expression
> whereLambda); //分页 //
方法的泛型,调这个方法时,传递这个类型 IQueryable
PageLoadEntities
(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression
>whereLambda, System.Linq.Expressions.Expression
>orderbyLambda, bool isAsc); //增 UserInfo AddEntity(UserInfo entity); //删 bool EditEntity(UserInfo entity); //改 bool DeleteEntity(UserInfo entity); }

 

1.3.1 给IDAL添加一个接口IBaseDal,并把IUserInfoDal的代码剪切过去,UserInfo替换成T

public interface IBaseDal
where T:class,new() { //查 IQueryable
LoadEntities(System.Linq.Expressions.Expression
> whereLambda); //分页 //
方法的泛型,调这个方法时,传递这个类型 IQueryable
PageLoadEntities
(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression
> whereLambda, System.Linq.Expressions.Expression
> orderbyLambda, bool isAsc); //增 T AddEntity(T entity); //删 bool EditEntity(T entity); //改 bool DeleteEntity(T entity); }

1.4.1 让IUserInfoDal接口继承IBaseDal,IUserInfoDal接口中只定义它特有的方法

public interface IUserInfoDal:IBaseDal
{ //定义自己特有的方法 }

2.1.1 CZBK.ItcastOA.DAL引用 IDAL和Model,添加一个类UserInfoDal

2.2.1 UserInfoDal继承并实现IUserInfoDal

2.3.1 先拿到操作数据的类 OAEntities

2.3.2 创建一个数据操作对象 Db,但是Db.UserInfo.点不出来

         因为DAL没有引入MVC

  

2.4.1 用新建空的实体模型的方法引入EF

 2.4.2 引入了下面这几个文件,可以删除掉生成的Model1.cs,这时候可以使用Db了

 

2.5.1 UserInfoDal实现增删改查分页的方法

public class UserInfoDal : IUserInfoDal    {        OAEntities Db = new OAEntities();        ///         /// 新增        ///         ///         /// 
public UserInfo AddEntity(UserInfo entity) { Db.UserInfo.Add(entity); Db.SaveChanges(); return entity; } /// /// 删除 /// /// ///
public bool DeleteEntity(UserInfo entity) { //追加到ef上,打上删除标记,再保存 Db.Entry
(entity).State = System.Data.Entity.EntityState.Deleted; return Db.SaveChanges() > 0; } ///
/// 更新 /// ///
///
public bool EditEntity(UserInfo entity) { //追加到ef上,打上编辑标记,再保存 Db.Entry
(entity).State = System.Data.Entity.EntityState.Modified; return Db.SaveChanges() > 0; } ///
/// 查询过滤 /// ///
///
public IQueryable
LoadEntities(Expression
> whereLambda) { return Db.UserInfo.Where(whereLambda); } ///
/// 分页 /// ///
///
页码 ///
每页数量 ///
总数 ///
过滤条件 ///
排序条件 ///
///
public IQueryable
PageLoadEntities
(int pageIndex, int pageSize, out int totalCount, Expression
> whereLambda, Expression
> orderbyLambda, bool isAsc) { var temp = Db.UserInfo.Where(whereLambda); totalCount = temp.Count(); if(isAsc)//正序 { //例:pageIndex=3,pageSize=15 //正序排列后,跳过第3页前的数据(前2页*15),剩下的只读取15条 temp = temp.OrderBy
(orderbyLambda).Skip
((pageIndex - 1) * pageSize).Take
(pageSize); } else//倒序 { temp = temp.OrderByDescending
(orderbyLambda).Skip
((pageIndex - 1) * pageSize).Take
(pageSize); } return temp; } }

2.6.1 每个页面都要实现增删改查分页的方法,所以可以新建一个BaseDal,把它们剪切到这里来,把公用方法的具体实现封装起来

         把UserInfo都替换成T

         Db.T.Add() 没有这种写法,改成Db.Set<T>().Add(),返回的就是DbSet<T>

         EF可以操作数据,就是因为这个DbSet<T>

2.6.2 BaseDal不需要继承IBaseDal,因为它已经把IBaseDal里面的公用方法都实现了

public class BaseDal
where T : class, new() { OAEntities Db = new OAEntities(); ///
/// 新增 /// ///
///
public T AddEntity(T entity) { Db.Set
().Add(entity);//DbSet
Db.SaveChanges(); return entity; } ///
/// 删除 /// ///
///
public bool DeleteEntity(T entity) { //追加到ef上,打上删除标记,再保存 Db.Entry
(entity).State = System.Data.Entity.EntityState.Deleted; return Db.SaveChanges() > 0; } ///
/// 更新 /// ///
///
public bool EditEntity(T entity) { //追加到ef上,打上编辑标记,再保存 Db.Entry
(entity).State = System.Data.Entity.EntityState.Modified; return Db.SaveChanges() > 0; } ///
/// 查询过滤 /// ///
///
public IQueryable
LoadEntities(Expression
> whereLambda) { return Db.Set
().Where(whereLambda); } ///
/// 分页 /// ///
///
页码 ///
每页数量 ///
总数 ///
过滤条件 ///
排序条件 ///
///
public IQueryable
PageLoadEntities
(int pageIndex, int pageSize, out int totalCount, Expression
> whereLambda, Expression
> orderbyLambda, bool isAsc) { var temp = Db.Set
().Where(whereLambda); totalCount = temp.Count(); if (isAsc)//正序 { //列:pageIndex=3,pageSize=15 //正序排列后,跳过第3页前的数据(前2页*15),剩下的只读取15条 temp = temp.OrderBy
(orderbyLambda).Skip
((pageIndex - 1) * pageSize).Take
(pageSize); } else//倒序 { temp = temp.OrderByDescending
(orderbyLambda).Skip
((pageIndex - 1) * pageSize).Take
(pageSize); } return temp; } }

2.7.1 UserInfoDal继承 BaseDal的公用方法,还继承了接口IUserInfoDal的自定义方法

public class UserInfoDal : BaseDal
,IUserInfoDal { //继承了公用方法,并且还继承了自定义的方法 //因为BaseDal已经实现了IBaseDal的公共方法,这里不需要再实现IUserInfo继承的IBaseDal的公共方法 }

 

转载于:https://www.cnblogs.com/VSMinos/p/9754935.html

你可能感兴趣的文章
linux下查找某个文件位置的方法
查看>>
python之MySQL学习——数据操作
查看>>
Harmonic Number (II)
查看>>
长连接、短连接、长轮询和WebSocket
查看>>
day30 模拟ssh远程执行命令
查看>>
做错的题目——给Array附加属性
查看>>
Url.Action取消字符转义
查看>>
HBase 笔记3
查看>>
Linux嵌入式GDB调试环境搭建
查看>>
java分析jvm常用指令
查看>>
【Linux】Linux 在线安装yum
查看>>
oracle 管理操作 (转)
查看>>
DEV 等待窗口
查看>>
lombok
查看>>
Dev-FAT-UAT-PRO
查看>>
Android开发学习总结(五)——Android应用目录结构分析(转)
查看>>
[PHP]PHP rpc框架hprose测试
查看>>
Atom 编辑器系列视频课程
查看>>
C#三种定时器
查看>>
范数 L1 L2
查看>>