1.1.0 创建数据层

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

1.2.1 给IDAL添加一个接口IUserInfoDal

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

 public interface IUserInfoDal
{
//查
IQueryable<UserInfo> LoadEntities(System.Linq.Expressions.Expression<Func<UserInfo,bool>> whereLambda);
//分页
//<s>方法的泛型,调这个方法时,传递这个类型
IQueryable<UserInfo> PageLoadEntities<s>(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression<Func<UserInfo,bool>>whereLambda, System.Linq.Expressions.Expression<Func<UserInfo, s>>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<T>where T:class,new()
{
//查
IQueryable<T> LoadEntities(System.Linq.Expressions.Expression<Func<T, bool>> whereLambda);
//分页
//<s>方法的泛型,调这个方法时,传递这个类型
IQueryable<T> PageLoadEntities<s>(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression<Func<T, bool>> whereLambda, System.Linq.Expressions.Expression<Func<T, s>> 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<UserInfo>
{
//定义自己特有的方法
}

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

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

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

ASP.Net MVC OA项目笔记<二>的更多相关文章

  1. ASP.Net MVC OA项目笔记<五>

    1.1.1  抽象工厂封装数据操作类实例创建,然后DBSession调用抽象工厂,修改DBSession CZBK.ItcastOA.DALFactory数据会话层调数据层不能直接new,要封装一下解 ...

  2. ASP.Net MVC OA项目笔记<六>

    1.1.1 开始写业务,先写业务的实现再写业务的接口 业务类中也是有写增删改查公用的方法 引用Model,IDAL,DALFactory BLL添加两个类 UserInfoService,BaseSe ...

  3. ASP.Net MVC OA项目笔记<四>

    1.1.1 EF线程唯一 在数据层中用到了EF的实例,在数据会话层也用到了,所以在一个请求中只能创建一个EF实例(线程内唯一对象),把它封装成工厂类 1.1.2 为了防止相互引用,循环引用,所以这个工 ...

  4. ASP.Net MVC OA项目笔记<三>

    1.1.1 业务层和数据层之间加一个数据会话层,封装所有数据操作类实例的创建(工厂类) 工厂类是负责对象的创建 作用:将BLL和DAL解耦了,提供一个数据访问的统一访问点 数据会话层DBSession ...

  5. ASP.Net MVC OA项目笔记<一>

    1.1.1 新建空白解决方案CZBK.ItcastOA 1.2.1 添加类库 1.2.2 同上添加多个类库 生成的 class1.cs先不用删除,删了的后,后面可能没办法直接点引用 1.3.1 添加表 ...

  6. ASP.NET MVC企业级项目框架

    ASP.NET MVC企业级项目框架 MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,搭建过程内容比较多,结合了抽象工厂 ...

  7. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  8. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  9. ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...

随机推荐

  1. Android Studio Tip of the Day

    1. Alt + Q 可以查看一个方法的简单参数列表. 2. 查看一个类,如果是eclipse的话,一般直接是F3, 现在的F3好痛苦.只能改为Ctrl + H,将就着用. 3. Ctrl + J 语 ...

  2. keepalived+nginx+tomcat+redis集群环境部署

    1.所需软件.jar包.配置文件下载:http://pan.baidu.com/s/1dFgntst 2.环境说明: centos6.5  64位 主节点:192.168.40.121 副节点:192 ...

  3. Android Studio 老提示adb问题

    Android Studio 老提示adb问题,restart后任然无解,最后发现某手机助手软件占用端口... 解决步骤: C:\Users\xxx>netstat -ano | findstr ...

  4. jetbrains产品的一些使用技巧

    取消界限: 设置默认字符长度的准线,在图一中进行修改目前上限是1000 快捷键的使用: crtl+D:复制当前代码,获取多个类似内容的时候可以直接使用. crtl+F:查找代码中的内容,可以使用正则表 ...

  5. python 函数学习sys.argv[]

    sys.argv 参数 「argv」是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序.这个变量其实是一个List列表,argv[0] 一般是“被调用的 ...

  6. 2018.12.12 codeforces 931E. Game with String(概率dp)

    传送门 感觉这题难点在读懂题. 题目简述:给你一个字符串s,设将其向左平移k个单位之后的字符串为t,现在告诉你t的第一个字符,然后你可以另外得知t的任意一个字符,求用最优策略猜对k的概率. 解析: 预 ...

  7. 2018.11.01 洛谷P3953 逛公园(最短路+dp)

    传送门 设f[i][j]f[i][j]f[i][j]表示跟最短路差值为iii当前在点jjj的方案数. in[i][j]in[i][j]in[i][j]表示在被选择的集合当中. 大力记忆化搜索就行了. ...

  8. ASP项目部署IIS7.5中遇到的问题

    我们大家都熟悉了tomcat服务器的部署,如果是一个ASP项目如何部署呢.这也是我在客户现场遇到的问题.ASP项目一般是用的系统组件IIS来部署项目.下面我讲一下自己在部署过程中遇到的问题. 如果在网 ...

  9. Keepalived+Nginx高可用架构配置

    1.yum install -y libnfnetlink-devel2.yum -y install libnl libnl-devel 3.yum -y install openssl-devel ...

  10. 实战fortran77基础语法

    1.数组在主函数和子例行函数中传递 一个项目中有两个源代码文件: 代码: PROGRAM ARRAYZBL DOUBLE PRECISION A,B,C,D(:) INTEGER I DATA A,B ...