zoukankan      html  css  js  c++  java
  • ORM之二:核心接口与扩展操作

    一、数据库提供者接口

       /// <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);
        }
  • 相关阅读:
    [文摘20070723]最经典的爱情观
    [转]ASP .Net C# 下 Word开发资料
    [引]如何藉由使用 Visual C# . NET 處理 Word 中的事件
    简单的搭建Web系统常用的框架页面
    Gentle 简单配置方法之一种
    在 可编辑的 Div 的 光标位置 插入 文字 或 HTML
    [转]使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图
    VS2005 添加 Microsoft.Office.Tools.Word.dll 等引用
    要事第一 事不过三
    VC slider用法
  • 原文地址:https://www.cnblogs.com/wucj/p/4947292.html
Copyright © 2011-2022 走看看