一、数据库提供者接口

   /// <summary>
/// 数据库提供者
/// </summary>
public interface IDbProvider : IDisposable
{
/// <summary>
/// 初始化数据库连接信息
/// </summary>
/// <param name="dbConnInfo"></param>
/// <returns></returns>
IDbProvider Init(DbConnInfo dbConnInfo); /// <summary>
/// 获取Lambda语法的数据操作对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
IReqository<T> GetReqository<T>() where T : class, new(); ///<summary>
/// 获取Linq语法的数据查询对象
///</summary>
///<typeparam name="T"></typeparam>
///<returns></returns>
IQuery<T> GetQuery<T>() where T : class, new(); ///<summary>
/// 扩展操作
///</summary>
///<returns></returns>
IDbExtension GetDbExtension(); /// <summary>
/// 事务开启
/// </summary>
void Begin(); /// <summary>
/// 事务提交
/// </summary>
void Commit(); /// <summary>
/// 事务回滚
/// </summary>
void Rollback(); } ///<summary>
/// 扩展数据库提供者
///</summary>
internal interface IDbProviderExtend : IDbProvider
{
IDbExecutor DbExecutor { get; }
}

二、单表操作

    /// <summary>
/// 标准的数据层接口
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IReqository<T> where T : class
{
/// <summary>
/// 新增实体对象
/// </summary>
/// <param name="entity">实体对象</param>
void Insert(T entity); /// <summary>
/// 批量新增实体对象
/// </summary>
/// <param name="entitys"></param>
void Insert(IList<T> entitys); /// <summary>
/// 根据条件表达式自动删除对应数据
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
int Delete(Expression<Func<T, bool>> where); /// <summary>
/// 根据条件表达式将映射对象的数据进行局部更新
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="update"></param>
/// <param name="where"></param>
/// <returns></returns>
int Update<TResult>(Expression<Func<T, TResult>> update, Expression<Func<T, bool>> where) where TResult : class; /// <summary>
/// 根据条件表达式获得[Top 1]实体对象
/// </summary>
/// <param name="where"></param>
/// <param name="nolock">是否允许脏读</param>
/// <returns></returns>
T Single(Expression<Func<T, bool>> where, bool nolock = false); /// <summary>
/// 根据条件表达式获得实体对象列表
/// </summary>
/// <param name="where">条件表达式</param>
/// <param name="nolock">是否允许脏读</param>
/// <returns></returns>
IList<T> Select(Expression<Func<T, bool>> where, bool nolock = false); /// <summary>
/// 根据条件表达式获得指定记录的条数
/// </summary>
/// <param name="where"></param>
/// <param name="nolock">是否允许脏读</param>
/// <returns></returns>
int Count(Expression<Func<T, bool>> where, bool nolock = false); /// <summary>
/// 根据条件表达式获取某列的和
/// </summary>
/// <param name="select"></param>
/// <param name="where"></param>
/// <param name="noLock"></param>
/// <returns></returns>
object Sum<TResult>(Expression<Func<T, TResult>> select, Expression<Func<T, bool>> where, bool noLock = false); }

三、多表操作

    ///<summary>
/// 多表查询对象接口
///</summary>
///<typeparam name="T">数据实体</typeparam>
public interface IQuery<out T> : IOrderedQueryable<T>
{
} ///<summary>
/// IQuery的扩展方法
///</summary>
public static class Query
{
///<summary>
/// 分页功能
///</summary>
///<param name="source"></param>
///<param name="rowCount">每页的行数</param>
///<param name="pageNumber">第几页</param>
///<typeparam name="TSource"></typeparam>
///<returns></returns>
public static IQueryable<TSource> Page<TSource>(this IQueryable<TSource> source, int rowCount, int pageNumber)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
return source.Provider.CreateQuery<TSource>(Expression.Call(null,
((MethodInfo) MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[]
{
typeof (TSource)
}),
new Expression[]
{
source.Expression,
Expression.Constant(rowCount),
Expression.Constant(pageNumber)
}));
} ///<summary>
/// 扩展join功能
///</summary>
///<param name="source"></param>
///<param name="joins"></param>
///<typeparam name="TSource"></typeparam>
///<returns></returns>
public static IQueryable<TSource> SetJoinMode<TSource>(this IQueryable<TSource> source, params JoinMode[] joins)
{
if (source == null)
{
throw new ArgumentNullException("source");
} return source.Provider.CreateQuery<TSource>(Expression.Call(null,
((MethodInfo) MethodBase.GetCurrentMethod()).
MakeGenericMethod(new Type[] {typeof (TSource)}),
new Expression[]
{
source.Expression,
Expression.Constant(joins)
}));
}
} ///<summary>
///</summary>
public enum JoinMode
{
///<summary>
/// 内连接
///</summary>
Inner, ///<summary>
/// 左连接
///</summary>
Left, ///<summary>
/// 右连接
///</summary>
Right, ///<summary>
/// 全连接
///</summary>
Full
}

四、扩展操作

/// <summary>
/// 扩展操作
/// </summary>
public interface IDbExtension
{
/// <summary>
/// 执行存储过程返回影响行数
/// </summary>
/// <param name="name"></param>
/// <param name="parameters"></param>
/// <returns></returns>
int ExcuteProcNonQuery(string name, DbParameterCollection parameters = null); /// <summary>
/// 执行存储过程返回DataSet
/// </summary>
/// <param name="name"></param>
/// <param name="parameters"></param>
/// <returns></returns>
DataSet ExcuteProcQuery(string name, DbParameterCollection parameters = null); /// <summary>
/// 执行存储过程返回泛型集合
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="name"></param>
/// <param name="parameters"></param>
/// <returns></returns>
IList<TResult> ExcuteProcReader<TResult>(string name, DbParameterCollection parameters = null); /// <summary>
/// 执行sql语句返回影响行数
/// </summary>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
int ExcuteNonQuery(string sql, DbParameterCollection parameters = null); /// <summary>
/// 执行sql语句返回DataSet
/// </summary>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
DataSet ExcuteQuery(string sql, DbParameterCollection parameters = null); /// <summary>
/// 执行sql语句返回泛型集合
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
IList<TResult> ExcuteQuery<TResult>(string sql, DbParameterCollection parameters = null);
}

ORM之二:核心接口与扩展操作的更多相关文章

  1. Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置

    Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的 ...

  2. Hibernate(三)__核心接口和类

    该图显示了核心接口类以及配置文件的关系层次,越往下越偏向底层数据库. 1. hibernate.cfg.xml文件 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下, ...

  3. Hibernate详解(5)——Hibernate核心接口和工作原理

    Hibernate核心接口 Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hi ...

  4. Spring Boot REST(一)核心接口

    Spring Boot REST(一)核心接口 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) SpringBoot RE ...

  5. Hibernate 之核心接口

    1.持久化和ORM 持久化是指把数据(内存中的对象)保存到可持久保存的存储设备中(如硬盘),主要应用于将内存中的数据存储到关系型数据库中,在三层结构中,持久层专注于实现系统的逻辑层面,将数据使用者与数 ...

  6. 深入解析Hibernate核心接口

    Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate核心接口,包括介绍SessionFactory接口.Query和Criteria接口等方面. Session 接口对于Hibe ...

  7. Hibernate核心接口和工作原理

    Hibernate核心接口和工作原理 Hibernate有五大核心接口,分别是:Session .Transaction .Query .SessionFactory .Configuration . ...

  8. spring源码系列(二):IOC接口设计分析

    这里主要对springIOC接口体系进行简单的概述和分析,具体每个接口详细分析在下面目录: 参考内容: <Spring技术内幕:深入解析 Spring架构与设计原理> 和 <Spri ...

  9. 【Spring】Spring的事务管理 - 1、Spring事务管理概述(数据库事务、Spring事务管理的核心接口)

    Spring事务管理概述 文章目录 Spring事务管理概述 数据库事务 什么是Spring的事务管理? Spring对事务管理的支持 Spring事务管理的核心接口 Platform Transac ...

随机推荐

  1. 在“BindingNavigator”删除数据前弹出确认框的实现

    1)先设置DeleteItem为空,不让它调用自动生成的删除代码. 2)然后自己写代码实现,如下: private void bindingNavigatorDeleteItem_Click(obje ...

  2. windows获取窗口句柄

    1.使用FindWindow函数获取窗口句柄 示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小和标题,并且移动窗口到指定位置. #include <Windows.h> # ...

  3. Spring 教程(二)

    一.Spring AOP介绍 开发其实就是在不断的重构,抽象重复代码,然后进行封装.从最原始的模块化编程到面向对象编程,代码的封装越来越整齐清晰,但是依然存在重复的代码,而这些重复代码几乎都是与业务逻 ...

  4. HttpListener supports SSL only for localhost? install certificate

    1.Start-All Programs - 2.execute below lines on that ‘Developer Command Prompt..’ tool makecert -n & ...

  5. 黑盒测试用例设计方法&理论结合实际 -> 边界值分析法

    一. 概念 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法.通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界. 二. 边界值分析法的应用 根据大量的测 ...

  6. 【暑假】[实用数据结构]UVAlive 3644 X-Plosives

    UVAlive X-Plosives 思路:    “如果车上存在k个简单化合物,正好包含k种元素,那么他们将组成一个易爆的混合物”  如果将(a,b)看作一条边那么题意就是不能出现环,很容易联想到K ...

  7. CDR绘制绚丽五角星※※

    CDR绘制绚丽五角星 1.绘制一个五角星,在多边形工具下拉的第二个就是 2.选中五角星,点击颜色即可.给五角星加上颜色 3.用立体化工具进行延伸. 4.点击图形中心向下拉. 看到了中间的一个长方条了没 ...

  8. 大数据架构师基础:hadoop家族,Cloudera产品系列等各种技术

    大数据我们都知道hadoop,可是还会各种各样的技术进入我们的视野:Spark,Storm,impala,让我们都反映不过来.为了能够更好的架构大数据项目,这里整理一下,供技术人员,项目经理,架构师选 ...

  9. BNUOJ-29365 Join in tasks 简单数学

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=29365 首先排序,然后维护一个后缀,等差求下和就可以了.. //STATUS:C++_AC ...

  10. Visual Studio C++ Command Line

    最近在Visual Studio 2012进行vp8的开发,之前一直都是在ubuntu上进行开发,关于编译链接的一些选项可直接在makefile中定义,比如vp8的头文件都放在include文件下面, ...