第六篇 项目疑问 ------- 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代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...
随机推荐
- UVa 10716 - Evil Straw Warts Live
题目大意:给一个字符串,判断是否能通过交换字母构成回文,如果能,计算所需的最小交换次数. 如果字符串中出现奇数次的字母的个数>1,则不能构成回文.然后...就没思路了...看网上说用贪心的思想先 ...
- mysql中游标的使用案例详解(学习笔记)
1.游标是啥玩意?简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行.我给大家准备一张图: 2.怎么使 ...
- python 自动化之路 day 14
今日内容 http://www.cnblogs.com/wupeiqi/articles/5699254.html 群共享 s15Html课件 1. paramiko模块 https://github ...
- Intellij idea 15配置tomcat,maven
刚导了个项目进去,想把项目运行起开,怎么也找不到tomcat... ctrl + alt +s,打开设置窗,搜索 Application Server Tomcat: 点中间绿色的“+”号,添加选择t ...
- JavaScript实用功能代码片段
把平时网站上常用的一些实用功能代码片段通通收集起来,方面网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率. 1.原生JavaScript实现字符串长度截取 function cutst ...
- Delphi在Vasta/win 7下通过UAC控制
在Windows编程时,为了兼容Win7与XP,许多需要底层权限的程序需要通过UAC验证,这是微软出的一个很恶心的东西……还不如Ubuntu那种Root机制呢……但是有困难我们就要克服-现在有一种方式 ...
- JavaScript事件处理程序的3种方式
最近这段时间因为每天要修改网站,为网站做特效,所以看了很多的js接触事件,自己只会使用一小部分,有时用的时候也比较混乱,现在系统的整理了一下,首先跟大家在马海祥博客上跟大家分享的是JavaScript ...
- js架构设计模式——由项目浅谈JS中MVVM模式
1. 背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...
- Java div 使用说明
1. 置于底部 position:absolute; bottom:0;
- Last-Modified和ETag以及Apache和Nginx中的配置
1) 什么是”Last-Modified”? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修 ...