第六篇 项目疑问 ------- BaseService<T> where T : class, new() 含义
public abstract class BaseService<T> where T : class, new()
{
//当前仓储
//DbSession的存放
//为了职责单一的原则,将获取线程内唯一实例的DbSession的逻辑放到工厂里面去了
public IDbSession DbSession = DbSessionFactory.GetCurrentDbSession();
//基类的构造函数
protected BaseService()
{
SetCurrentRepository(); //构造函数里面去调用了,此设置当前仓储的抽象方法
}
public IBaseRepository<T> CurrentRepository { get; set; }
public abstract void SetCurrentRepository(); //子类必须实现
//实现对数据库的添加功能
public T AddEntity(T entity)
{
//调用T对应的仓储来做添加工作
T addEntity = CurrentRepository.AddEntity(entity);
DbSession.SaveChanges();
return addEntity;
}
//实现对数据的修改功能
public bool UpdateEntity(T entity)
{
CurrentRepository.UpdateEntity(entity);
return DbSession.SaveChanges() > 0;
}
//实现对数据库的删除功能
public bool DeleteEntity(T entity)
{
CurrentRepository.DeleteEntity(entity);
return DbSession.SaveChanges() > 0;
}
//实现对数据库的查询 --简单查询
public IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda)
{
return CurrentRepository.LoadEntities(whereLambda);
}
//实现对数据库的查询 --简单查询
public IQueryable<T> LoadEntities()
{
return CurrentRepository.LoadEntities();
}
/// <summary>
/// 实现对数据的分页查询
/// </summary>
/// <typeparam name="S">按照某个类进行排序</typeparam>
/// <param name="pageIndex">当前第几页</param>
/// <param name="pageSize">一页显示多少条数据</param>
/// <param name="total">总条数</param>
/// <param name="whereLambda">取得排序的条件</param>
/// <param name="isAsc">如何排序,根据倒叙还是升序</param>
/// <param name="orderByLambda">根据那个字段进行排序</param>
/// <returns></returns>
public IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out int total,
Expression<Func<T, bool>> whereLambda,
bool isAsc, Expression<Func<T, S>> orderByLambda)
{
return CurrentRepository.LoadPageEntities(pageIndex, pageSize, out total, whereLambda, isAsc, orderByLambda);
}
}
}
查找后发现这是类型参数约束,.NET支持的类型参数约束有以下五种:
where T : struct | T必须是一个结构类型 where T : class T必须是一个类(class)类型 where T : new() | T必须要有一个无参构造函数 where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类 where T : NameOfInterface | T必须实现名为NameOfInterface的接口 文章参考:http://xdwangiflytek.iteye.com/blog/1390464
第六篇 项目疑问 ------- BaseService<T> where T : class, new() 含义的更多相关文章
- Flask第六篇——项目配置文件
我们在开发中,通常将一些需要用到的配置选项单独放在一个文件中,比如叫configs.py中.然后通过一些方式加载. 现在将加载配置文件的方法罗列如下: 1.先新建文件configs.py,文件代码: ...
- 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...
- 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions (译) http://improve.dk/avoiding-regressions-in-orcamdf-b ...
- 第六篇 Replication:合并复制-发布
本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...
- 第六篇 SQL Server代理深入作业步骤工作流
本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...
- [老老实实学WCF] 第六篇 元数据交换
老老实实学WCF 第六篇 元数据交换 通过前两篇的学习,我们了解了WCF通信的一些基本原理,我们知道,WCF服务端和客户端通过共享元数据(包括服务协定.服务器终结点信息)在两个 终结点上建立通道从而进 ...
- “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第六篇(图片新闻的添加以及带分页的静态页的生成)
“MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第六篇(图片新闻的添加以及带分页的静态页的生成) 一.这篇文章主要是要实现:图片新闻的添加,无刷新图片的上传,以及添加新闻静 ...
- 【译】第六篇 Replication:合并复制-发布
本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...
- 【译】第六篇 SQL Server代理深入作业步骤工作流
本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...
随机推荐
- ZipFile和ZipInputSteam解压zip文件
最近有个需求,要接受上穿的zip文件,解压后读取里面的文件(应该还有目录),提前储备一下需要的知识. 贴在博客上,有需要的可以参考. ZipInputStream解压文件: @Test public ...
- 排序问题思考(要求时间和空间复杂度尽可能的低)【Part 2】
继上篇博文,今天我将先介绍一下什么是计数排序,将计数排序描述清楚后,再进行后续的桶排序方法解决这个问题. 通常情况下,一提到排序,大家第一反应就是比较,其实,今天我要说的这个计数排序,不是基于比较的排 ...
- HNOI2002(伸展树)
营业额统计 Time Limit:5000MS Memory Limit:165888KB 64bit IO Format:%lld & %llu Submit Status ...
- ArcGIS10.2直连PostgreSQL存在问题
现象: 将下载到的libeay32.dll, libiconv-2.dll, libintl-8.dll, libpq.dll, ssleay32.dll文件拷贝到Desktop 安装目录的bin目录 ...
- 在ubuntu下编写python(python入门)
在ubuntu下编写python 一般情况下,ubuntu已经安装了python,打开终端,直接输入python,即可进行python编写. 默认为python2 如果想写python3,在终端输入p ...
- 关于echarts地图下钻。
在去年十二月份,前端老大交代个任务,关于地图下钻.这里做了个简单的青岛地图下钻,初学echarts,做的不精,凑合看看吧. 第一步呢,先引入echarts等文件,这是最基本的. 第二步,到官网下载 ...
- 简单三层分页aspnetpager控件(欢迎指点)
首先添加引用AspNetpager.dll(将.dll文件放在bin中进行引用) 接着添加<%@ Register Assembly="AspNetPager" Namesp ...
- java的位运算符
1.与运算&,同为1为1,否则为0: 例如:10001(二进制)&10000(二进制)=10000(二进制) 2.或运算|,只要有1就是1: 例如:10001(二进制)&100 ...
- Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be
有些操作只能回到主线程操作 比如: mbprogresshud只能在主线程中使用 而且注意凡是关于布局的代码也只能下载主线程
- bootstrap - btn
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...