zoukankan      html  css  js  c++  java
  • 使用SqlSugar封装的数据层基类

    首先简单封装了个DbContext

      1  public class DbContext
      2     {
      3         #region 属性字段
      4         private static string _connectionString;
      5 
      6         /// <summary>
      7         /// 连接字符串 by beck.huang 2018-05-08 09:56:05
      8         /// </summary>
      9         public static string ConnectionString
     10         {
     11             get { return _connectionString; }
     12             set { _connectionString = value; }
     13         }
     14 
     15         private static DbType _dbType;
     16 
     17         /// <summary>
     18         /// 数据库类型 by beck.huang 2018-05-08 09:58:03
     19         /// </summary>
     20         public static DbType DbType
     21         {
     22             get { return _dbType; }
     23             set { _dbType = value; }
     24         }
     25 
     26 
     27         private SqlSugarClient _db;
     28 
     29         /// <summary>
     30         /// 数据连接对象 by beck.huang 2018-05-08 10:00:14
     31         /// </summary>
     32         public SqlSugarClient Db
     33         {
     34             get { return _db; }
     35             private set { _db = value; }
     36         }
     37 
     38         /// <summary>
     39         /// 数据库上下文实例(自动关闭连接) by beck.huang 2018-05-08 09:47:30
     40         /// </summary>
     41         public static DbContext Context
     42         {
     43             get
     44             {
     45                 return new DbContext();
     46             }
     47 
     48         }
     49         #endregion
     50 
     51         #region 构造函数
     52 
     53         /// <summary>
     54         /// 功能描述:构造函数
     55         /// 作  者:beck.huang
     56         /// 创建日期:2018-05-08 09:47:24
     57         /// 任务编号:中餐
     58         /// </summary>
     59         private DbContext()
     60         {
     61             if (string.IsNullOrEmpty(_connectionString))
     62                 throw new ArgumentNullException("数据库连接字符串为空");
     63             _db = new SqlSugarClient(new ConnectionConfig()
     64             {
     65                 ConnectionString = _connectionString,
     66                 DbType = _dbType,
     67                 IsAutoCloseConnection = true,
     68                 IsShardSameThread = true,
     69                 ConfigureExternalServices = new ConfigureExternalServices()
     70                 {
     71                     DataInfoCacheService = new HttpRuntimeCache()
     72                 },
     73                 MoreSettings = new ConnMoreSettings()
     74                 {
     75                     //IsWithNoLockQuery = true,
     76                     IsAutoRemoveDataCache = true
     77                 }
     78             });
     79         }
     80 
     81         /// <summary>
     82         /// 功能描述:构造函数
     83         /// 作  者:beck.huang
     84         /// 创建日期:2018-05-28 17:23:19
     85         /// 任务编号:中餐
     86         /// </summary>
     87         /// <param name="blnIsAutoCloseConnection">是否自动关闭连接</param>
     88         private DbContext(bool blnIsAutoCloseConnection)
     89         {
     90             if (string.IsNullOrEmpty(_connectionString))
     91                 throw new ArgumentNullException("数据库连接字符串为空");
     92             _db = new SqlSugarClient(new ConnectionConfig()
     93             {
     94                 ConnectionString = _connectionString,
     95                 DbType = _dbType,
     96                 IsAutoCloseConnection = blnIsAutoCloseConnection,
     97                 IsShardSameThread = true,
     98                 ConfigureExternalServices = new ConfigureExternalServices()
     99                 {
    100                     DataInfoCacheService = new HttpRuntimeCache()
    101                 },
    102                 MoreSettings = new ConnMoreSettings()
    103                 {
    104                     //IsWithNoLockQuery = true,
    105                     IsAutoRemoveDataCache = true
    106                 }
    107             });
    108         }
    109         #endregion
    110 
    111         #region 实例方法
    112         /// <summary>
    113         /// 功能描述:获取数据库处理对象
    114         /// 作  者:beck.huang
    115         /// 创建日期:2018-05-08 09:46:06
    116         /// 任务编号:中餐
    117         /// </summary>
    118         /// <returns>返回值</returns>
    119         public SimpleClient<T> GetEntityDB<T>() where T : class,new()
    120         {
    121             return new SimpleClient<T>(_db);
    122         }
    123         /// <summary>
    124         /// 功能描述:获取数据库处理对象
    125         /// 作  者:beck.huang
    126         /// 创建日期:2018-05-09 09:17:43
    127         /// 任务编号:中餐
    128         /// </summary>
    129         /// <param name="db">db</param>
    130         /// <returns>返回值</returns>
    131         public SimpleClient<T> GetEntityDB<T>(SqlSugarClient db) where T : class,new()
    132         {
    133             return new SimpleClient<T>(db);
    134         }
    135 
    136         #region 根据数据库表生产实体类
    137         /// <summary>
    138         /// 功能描述:根据数据库表生产实体类
    139         /// 作  者:beck.huang
    140         /// 创建日期:2018-05-08 10:14:37
    141         /// 任务编号:中餐
    142         /// </summary>       
    143         /// <param name="strPath">实体类存放路径</param>
    144         public void CreateClassFileByDBTalbe(string strPath)
    145         {
    146             CreateClassFileByDBTalbe(strPath, "Km.PosZC");
    147         }
    148         /// <summary>
    149         /// 功能描述:根据数据库表生产实体类
    150         /// 作  者:beck.huang
    151         /// 创建日期:2018-05-08 10:10:59
    152         /// 任务编号:中餐
    153         /// </summary>
    154         /// <param name="strPath">实体类存放路径</param>
    155         /// <param name="strNameSpace">命名空间</param>
    156         public void CreateClassFileByDBTalbe(string strPath, string strNameSpace)
    157         {
    158             CreateClassFileByDBTalbe(strPath, strNameSpace, null);
    159         }
    160 
    161         /// <summary>
    162         /// 功能描述:根据数据库表生产实体类
    163         /// 作  者:beck.huang
    164         /// 创建日期:2018-05-08 10:18:18
    165         /// 任务编号:中餐
    166         /// </summary>
    167         /// <param name="strPath">实体类存放路径</param>
    168         /// <param name="strNameSpace">命名空间</param>
    169         /// <param name="lstTableNames">生产指定的表</param>
    170         public void CreateClassFileByDBTalbe(
    171             string strPath,
    172             string strNameSpace,
    173             string[] lstTableNames)
    174         {
    175             CreateClassFileByDBTalbe(strPath, strNameSpace, lstTableNames, string.Empty);
    176         }
    177 
    178         /// <summary>
    179         /// 功能描述:根据数据库表生产实体类
    180         /// 作  者:beck.huang
    181         /// 创建日期:2018-05-09 15:38:22
    182         /// 任务编号:中餐
    183         /// </summary>
    184         /// <param name="strPath">实体类存放路径</param>
    185         /// <param name="strNameSpace">命名空间</param>
    186         /// <param name="lstTableNames">生产指定的表</param>
    187         /// <param name="strInterface">实现接口</param>
    188         public void CreateClassFileByDBTalbe(
    189           string strPath,
    190           string strNameSpace,
    191           string[] lstTableNames,
    192           string strInterface,
    193           bool blnSerializable = false)
    194         {
    195             if (lstTableNames != null && lstTableNames.Length > 0)
    196             {
    197                 _db.DbFirst.Where(lstTableNames).IsCreateDefaultValue().IsCreateAttribute()
    198                     .SettingClassTemplate(p => p = @"
    199 {using}
    200 
    201 namespace {Namespace}
    202 {
    203     {ClassDescription}{SugarTable}" + (blnSerializable ? "[Serializable]" : "") + @"
    204     public partial class {ClassName}" + (string.IsNullOrEmpty(strInterface) ? "" : (" : " + strInterface)) + @"
    205     {
    206         public {ClassName}()
    207         {
    208 {Constructor}
    209         }
    210 {PropertyName}
    211     }
    212 }
    213 ")
    214                     .SettingPropertyTemplate(p => p = @"
    215             {SugarColumn}
    216             public {PropertyType} {PropertyName}
    217             {
    218                 get
    219                 {
    220                     return _{PropertyName};
    221                 }
    222                 set
    223                 {
    224                     if(_{PropertyName}!=value)
    225                     {
    226                         base.SetValueCall(" + ""{PropertyName}",_{PropertyName}" + @");
    227                     }
    228                     _{PropertyName}=value;
    229                 }
    230             }")
    231                     .SettingPropertyDescriptionTemplate(p => p = "          private {PropertyType} _{PropertyName};
    " + p)
    232                     .SettingConstructorTemplate(p => p = "              this._{PropertyName} ={DefaultValue};")
    233                     .CreateClassFile(strPath, strNameSpace);
    234             }
    235             else
    236             {
    237                 _db.DbFirst.IsCreateAttribute().IsCreateDefaultValue()
    238                     .SettingClassTemplate(p => p = @"
    239 {using}
    240 
    241 namespace {Namespace}
    242 {
    243     {ClassDescription}{SugarTable}" + (blnSerializable ? "[Serializable]" : "") + @"
    244     public partial class {ClassName}" + (string.IsNullOrEmpty(strInterface) ? "" : (" : " + strInterface)) + @"
    245     {
    246         public {ClassName}()
    247         {
    248 {Constructor}
    249         }
    250 {PropertyName}
    251     }
    252 }
    253 ")
    254                     .SettingPropertyTemplate(p => p = @"
    255             {SugarColumn}
    256             public {PropertyType} {PropertyName}
    257             {
    258                 get
    259                 {
    260                     return _{PropertyName};
    261                 }
    262                 set
    263                 {
    264                     if(_{PropertyName}!=value)
    265                     {
    266                         base.SetValueCall(" + ""{PropertyName}",_{PropertyName}" + @");
    267                     }
    268                     _{PropertyName}=value;
    269                 }
    270             }")
    271                     .SettingPropertyDescriptionTemplate(p => p = "          private {PropertyType} _{PropertyName};
    " + p)
    272                     .SettingConstructorTemplate(p => p = "              this._{PropertyName} ={DefaultValue};")
    273                     .CreateClassFile(strPath, strNameSpace);
    274             }
    275         }
    276         #endregion
    277 
    278         #region 根据实体类生成数据库表
    279         /// <summary>
    280         /// 功能描述:根据实体类生成数据库表
    281         /// 作  者:beck.huang
    282         /// 创建日期:2018-05-08 10:31:02
    283         /// 任务编号:中餐
    284         /// </summary>
    285         /// <param name="blnBackupTable">是否备份表</param>
    286         /// <param name="lstEntitys">指定的实体</param>
    287         public void CreateTableByEntity<T>(bool blnBackupTable, params T[] lstEntitys) where T : class,new()
    288         {
    289             Type[] lstTypes = null;
    290             if (lstEntitys != null)
    291             {
    292                 lstTypes = new Type[lstEntitys.Length];
    293                 for (int i = 0; i < lstEntitys.Length; i++)
    294                 {
    295                     T t = lstEntitys[i];
    296                     lstTypes[i] = typeof(T);
    297                 }
    298             }
    299             CreateTableByEntity(blnBackupTable, lstTypes);
    300         }
    301 
    302         /// <summary>
    303         /// 功能描述:根据实体类生成数据库表
    304         /// 作  者:beck.huang
    305         /// 创建日期:2018-05-08 10:31:14
    306         /// 任务编号:中餐
    307         /// </summary>
    308         /// <param name="blnBackupTable">是否备份表</param>
    309         /// <param name="lstEntitys">指定的实体</param>
    310         public void CreateTableByEntity(bool blnBackupTable, params Type[] lstEntitys)
    311         {
    312             if (blnBackupTable)
    313             {
    314                 _db.CodeFirst.BackupTable().InitTables(lstEntitys); //change entity backupTable            
    315             }
    316             else
    317             {
    318                 _db.CodeFirst.InitTables(lstEntitys);
    319             }
    320         }
    321         #endregion
    322 
    323         #endregion
    324 
    325         #region 静态方法
    326 
    327         /// <summary>
    328         /// 功能描述:获得一个DbContext
    329         /// 作  者:beck.huang
    330         /// 创建日期:2018-05-28 17:24:12
    331         /// 任务编号:中餐
    332         /// </summary>
    333         /// <param name="blnIsAutoCloseConnection">是否自动关闭连接(如果为false,则使用接受时需要手动关闭Db)</param>
    334         /// <returns>返回值</returns>
    335         public static DbContext GetDbContext(bool blnIsAutoCloseConnection)
    336         {
    337             return new DbContext(blnIsAutoCloseConnection);
    338         }
    339 
    340         /// <summary>
    341         /// 功能描述:设置初始化参数
    342         /// 作  者:beck.huang
    343         /// 创建日期:2018-05-08 10:02:32
    344         /// 任务编号:中餐
    345         /// </summary>
    346         /// <param name="strConnectionString">连接字符串</param>
    347         /// <param name="enmDbType">数据库类型</param>
    348         public static void Init(string strConnectionString, DbType enmDbType = SqlSugar.DbType.MySql)
    349         {
    350             _connectionString = strConnectionString;
    351             _dbType = enmDbType;
    352         }
    353 
    354         /// <summary>
    355         /// 功能描述:创建一个链接配置
    356         /// 作  者:beck.huang
    357         /// 创建日期:2018-05-09 09:03:33
    358         /// 任务编号:中餐
    359         /// </summary>
    360         /// <param name="blnIsAutoCloseConnection">是否自动关闭连接</param>
    361         /// <param name="blnIsShardSameThread">是否夸类事务</param>
    362         /// <returns>ConnectionConfig</returns>
    363         public static ConnectionConfig GetConnectionConfig(bool blnIsAutoCloseConnection = true, bool blnIsShardSameThread = false)
    364         {
    365             ConnectionConfig config = new ConnectionConfig()
    366             {
    367                 ConnectionString = _connectionString,
    368                 DbType = _dbType,
    369                 IsAutoCloseConnection = blnIsAutoCloseConnection,
    370                 ConfigureExternalServices = new ConfigureExternalServices()
    371                 {
    372                     DataInfoCacheService = new HttpRuntimeCache()
    373                 },
    374                 IsShardSameThread = blnIsShardSameThread
    375             };
    376             return config;
    377         }
    378 
    379         /// <summary>
    380         /// 功能描述:获取一个自定义的DB
    381         /// 作  者:beck.huang
    382         /// 创建日期:2018-05-08 09:49:36
    383         /// 任务编号:中餐
    384         /// </summary>
    385         /// <param name="config">config</param>
    386         /// <returns>返回值</returns>
    387         public static SqlSugarClient GetCustomDB(ConnectionConfig config)
    388         {
    389             return new SqlSugarClient(config);
    390         }
    391         /// <summary>
    392         /// 功能描述:获取一个自定义的数据库处理对象
    393         /// 作  者:beck.huang
    394         /// 创建日期:2018-05-09 08:56:20
    395         /// 任务编号:中餐
    396         /// </summary>
    397         /// <param name="sugarClient">sugarClient</param>
    398         /// <returns>返回值</returns>
    399         public static SimpleClient<T> GetCustomEntityDB<T>(SqlSugarClient sugarClient) where T : class,new()
    400         {
    401             return new SimpleClient<T>(sugarClient);
    402         }
    403         /// <summary>
    404         /// 功能描述:获取一个自定义的数据库处理对象
    405         /// 作  者:beck.huang
    406         /// 创建日期:2018-05-08 09:50:32
    407         /// 任务编号:中餐
    408         /// </summary>
    409         /// <param name="config">config</param>
    410         /// <returns>返回值</returns>
    411         public static SimpleClient<T> GetCustomEntityDB<T>(ConnectionConfig config) where T : class,new()
    412         {
    413             SqlSugarClient sugarClient = GetCustomDB(config);
    414             return GetCustomEntityDB<T>(sugarClient);
    415         }
    416         #endregion
    417     }
    View Code

    然后是一个BaseDal,基本上覆盖了大部分的增删改查功能

     public class BaseDal<T> where T : class ,new()
        {
            #region 属性字段
            private DbContext _context;
    
            public DbContext Context
            {
                get { return _context; }
                set { _context = value; }
            }
    
            private SqlSugarClient _db;
    
            /// <summary>
            /// 数据处理对象 by beck.huang 2018-05-09 09:31:24
            /// </summary>
            internal SqlSugarClient Db
            {
                get { return _db; }
                private set { _db = value; }
            }
    
            private SimpleClient<T> _entityDB;
    
            /// <summary>
            /// 实体数据处理对象 by beck.huang 2018-05-09 09:31:15
            /// </summary>
            internal SimpleClient<T> EntityDB
            {
                get { return _entityDB; }
                private set { _entityDB = value; }
            }
    
            public Action<Exception> OnDalError { get; set; }
            public Action<string, SugarParameter[]> OnDalLogExecuting { get; set; }
            public Action<string, SugarParameter[]> OnDalLogExecuted { get; set; }
            public Func<string, SugarParameter[], KeyValuePair<string, SugarParameter[]>> OnDalExecutingChangeSql { get; set; }
            #endregion
    
            #region 构造函数
            /// <summary>
            /// 功能描述:构造函数
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 09:30:54
            /// 任务编号:中餐
            /// </summary>
            /// <param name="blnIsAutoCloseConnection">是否自动关闭连接</param>
            public BaseDal(bool blnIsAutoCloseConnection = true)
            {
                DbContext context = DbContext.GetDbContext(blnIsAutoCloseConnection);
                _context = context;
                _db = context.Db;
                //_db.Aop.OnLogExecuted = new Action<string, SugarParameter[]>(OnLogExecuted);
                //_db.Aop.OnLogExecuting = OnDalLogExecuting;
                //_db.Aop.OnError = OnDalError;
                //_db.Aop.OnExecutingChangeSql = new Func<string, SugarParameter[], KeyValuePair<string, SugarParameter[]>>(OnExecutingChangeSql);
                _entityDB = context.GetEntityDB<T>(_db);
            }
    
            /// <summary>
            /// 功能描述:使用指定的DbContext初始化一个对象
            /// 作  者:beck.huang
            /// 创建日期:2018-05-28 17:31:57
            /// 任务编号:中餐
            /// </summary>
            /// <param name="context">DbContext</param>
            public BaseDal(DbContext context)
            {
                _context = context;
                _db = context.Db;
                _entityDB = context.GetEntityDB<T>(_db);
            }
            #endregion
    
            #region/// <summary>
            /// 功能描述:插入数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 17:57:26
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strSql">strSql</param>
            /// <param name="parameters">parameters</param>
            /// <returns>是否成功</returns>
            public bool Insert(string strSql, SugarParameter[] parameters = null)
            {
                return _db.Ado.ExecuteCommand(strSql, parameters) > 0;
            }
            /// <summary>
            /// 功能描述:插入数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 09:43:06
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entitys">实体列表</param>
            /// <returns>是否成功</returns>
            public bool Insert(params T[] entitys)
            {
                if (entitys != null && entitys.Length > 0)
                {
                    return _entityDB.InsertRange(entitys);
                }
                return true;
            }
    
            /// <summary>
            /// 功能描述:插入数据,返回自增列
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 09:44:52
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entity">实体</param>
            /// <returns>自增ID</returns>
            public int InsertReturnIdentity(T entity)
            {
                return _entityDB.InsertReturnIdentity(entity);
            }
            #endregion
    
            #region/// <summary>
            /// 功能描述:删除指定实体
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 09:47:38
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entity">实体(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <returns>是否成功</returns>
            public bool Delete(T entity)
            {
                return _entityDB.Delete(entity);
            }
    
            /// <summary>
            /// 功能描述:删除数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:06:10
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entitys">实体列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <returns>受影响行数</returns>
            public int Delete(T[] entitys)
            {
                if (entitys != null)
                    return _db.Deleteable<T>(entitys.ToList()).ExecuteCommand();
                else
                    return 0;
            }
            /// <summary>
            /// 功能描述:删除数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 09:52:35
            /// 任务编号:中餐
            /// </summary>
            /// <param name="whereExpression">条件表达式</param>
            /// <returns>是否成功</returns>
            public bool Delete(Expression<Func<T, bool>> whereExpression)
            {
                return _entityDB.Delete(whereExpression);
            }
            /// <summary>
            /// 功能描述:删除数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:02:37
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <returns>是否成功</returns>
            public bool Delete(string strWhere)
            {
                return _db.Deleteable<T>().Where(strWhere).ExecuteCommand() > 0;
            }
            /// <summary>
            /// 功能描述:删除数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:02:37
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <returns>是否成功</returns>
            public bool Delete(string strWhere, List<SugarParameter> lstParameters)
            {
                return _db.Deleteable<T>().Where(strWhere, lstParameters).ExecuteCommand() > 0;
            }
    
            /// <summary>
            /// 功能描述:根据ID删除
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:08:18
            /// 任务编号:中餐
            /// </summary>
            /// <param name="ids">主键列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <returns>受影响行数</returns>
            public int DeleteByID(params object[] ids)
            {
                return _db.Deleteable<T>().In(ids).ExecuteCommand();
            }
    
            #endregion
    
            #region/// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 17:57:26
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strSql">strSql</param>
            /// <param name="parameters">parameters</param>
            /// <returns>是否成功</returns>
            public bool Update(string strSql, SugarParameter[] parameters = null)
            {
                return _db.Ado.ExecuteCommand(strSql, parameters) > 0;
            }
    
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:28:27
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entity">实体(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <returns>是否成功</returns>
            public bool Update(T entity)
            {
                return _entityDB.Update(entity);
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:28:27
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entity">实体</param>
            /// <param name="entity">条件</param>
            /// <returns>是否成功</returns>
            public bool Update(T entity, string strWhere)
            {
                return _db.Updateable(entity).Where(strWhere).ExecuteCommand() > 0;
            }
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:28:27
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entity">实体</param>
            /// <param name="entity">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <returns>是否成功</returns>
            public bool Update(
                T entity,
                string strWhere,
                List<SugarParameter> lstParameters)
            {
                return _db.Updateable(entity).Where(strWhere, lstParameters).ExecuteCommand() > 0;
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:31:15
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entitys">实体列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <returns>受影响行数</returns>
            public int Update(T[] entitys)
            {
                return Update(entitys, null, null);
            }
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 15:31:09
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entitys">实体列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <param name="lstColumns">更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="lstIgnoreColumns">不更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <returns>受影响行数</returns>
            public int Update(
                T[] entitys,
                List<string> lstColumns,
                List<string> lstIgnoreColumns)
            {
                return Update(entitys, lstColumns, lstIgnoreColumns, "");
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 15:31:47
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entitys">实体列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <param name="lstColumns">更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="lstIgnoreColumns">不更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="strWhere">条件</param>
            /// <returns>受影响行数</returns>
            public int Update(
                T[] entitys,
                List<string> lstColumns,
                List<string> lstIgnoreColumns,
                string strWhere)
            {
                return Update(entitys, lstColumns, lstIgnoreColumns, strWhere, null);
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 15:33:06
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entitys">实体列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <param name="lstColumns">更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="lstIgnoreColumns">不更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">条件参数</param>
            /// <returns>受影响行数</returns>
            public int Update(
                T[] entitys,
                List<string> lstColumns,
                List<string> lstIgnoreColumns,
                string strWhere,
                List<SugarParameter> lstParameters)
            {
                IUpdateable<T> up = _db.Updateable(entitys);
                if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
                {
                    up = up.IgnoreColumns(it => lstIgnoreColumns.Contains(it));
                }
                if (lstColumns != null && lstColumns.Count > 0)
                {
                    up = up.UpdateColumns(it => lstColumns.Contains(it));
                }
                if (!string.IsNullOrEmpty(strWhere))
                {
                    up = up.Where(strWhere, lstParameters);
                }
                return up.ExecuteCommand();
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 15:33:36
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entitys">实体列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <param name="lstColumns">更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="lstIgnoreColumns">不更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="whereExpression">条件</param>
            /// <returns>受影响行数</returns>
            public int Update(
                T[] entitys,
                List<string> lstColumns,
                List<string> lstIgnoreColumns,
                Expression<Func<T, bool>> whereExpression)
            {
                IUpdateable<T> up = _db.Updateable(entitys);
                if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
                {
                    up = up.IgnoreColumns(it => lstIgnoreColumns.Contains(it));
                }
                if (lstColumns != null && lstColumns.Count > 0)
                {
                    up = up.UpdateColumns(it => lstColumns.Contains(it));
                }
                if (whereExpression != null)
                {
                    up = up.Where(whereExpression);
                }
                return up.ExecuteCommand();
            }
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:40:18
            /// 任务编号:中餐
            /// </summary>
            /// <param name="columns">修改的列</param>
            /// <param name="whereExpression">条件表达式</param>
            /// <returns>是否成功</returns>
            public bool Update(Expression<Func<T, T>> columns, Expression<Func<T, bool>> whereExpression)
            {
                return _entityDB.Update(columns, whereExpression);
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:43:35
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entity">实体(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <param name="lstColumns">更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="lstIgnoreColumns">不更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <returns>是否成功</returns>
            public bool Update(
                T entity,
                List<string> lstColumns,
                List<string> lstIgnoreColumns)
            {
                return Update(entity, lstColumns, lstIgnoreColumns, string.Empty);
            }
    
    
    
            /// <summary>
            /// 功能描述:修改指定的列和值
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 19:33:46
            /// 任务编号:中餐
            /// </summary>       
            /// <param name="strWhere">条件</param>
            /// <param name="lstSetValueExpression">列和值列表(如:it => it.Name == (it.Name + 1))</param>
            /// <returns>是否成功</returns>
            public bool Update(string strWhere, params Expression<Func<T, bool>>[] lstSetValueExpression)
            {
                return Update(strWhere, null, lstSetValueExpression);
            }
    
            /// <summary>
            /// 功能描述:修改指定的列和值
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 19:34:01
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <param name="lstSetValueExpression">列和值列表(如:it => it.Name == (it.Name + 1))</param>        
            /// <returns>是否成功</returns>
            public bool Update(
                string strWhere,
                List<SugarParameter> lstParameters,
                params Expression<Func<T, bool>>[] lstSetValueExpression
                )
            {
                IUpdateable<T> up = _db.Updateable<T>();
                if (lstSetValueExpression != null)
                {
                    foreach (var item in lstSetValueExpression)
                    {
                        up = up.ReSetValue(item);
                    }
                }
                if (!string.IsNullOrEmpty(strWhere))
                {
                    up = up.Where(strWhere, lstParameters);
                }
    
                return up.ExecuteCommand() > 0;
            }
    
    
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:43:35
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entity">实体</param>
            /// <param name="lstColumns">更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="lstIgnoreColumns">不更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="strWhere">条件</param>
            /// <returns>是否成功</returns>
            public bool Update(
                T entity,
                List<string> lstColumns,
                List<string> lstIgnoreColumns,
                string strWhere)
            {
                IUpdateable<T> up = _db.Updateable(entity);
                if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
                {
                    up = up.IgnoreColumns(it => lstIgnoreColumns.Contains(it));
                }
                if (lstColumns != null && lstColumns.Count > 0)
                {
                    up = up.UpdateColumns(it => lstColumns.Contains(it));
                }
                if (!string.IsNullOrEmpty(strWhere))
                {
                    up = up.Where(strWhere);
                }
                return up.ExecuteCommand() > 0;
            }
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 10:43:35
            /// 任务编号:中餐
            /// </summary>
            /// <param name="entity">实体</param>
            /// <param name="lstColumns">更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="lstIgnoreColumns">不更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <returns>是否成功</returns>
            public bool Update(
                T entity,
                List<string> lstColumns,
                List<string> lstIgnoreColumns,
                string strWhere,
                List<SugarParameter> lstParameters)
            {
                IUpdateable<T> up = _db.Updateable(entity);
                if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
                {
                    up = up.IgnoreColumns(it => lstIgnoreColumns.Contains(it));
                }
                if (lstColumns != null && lstColumns.Count > 0)
                {
                    up = up.UpdateColumns(it => lstColumns.Contains(it));
                }
                if (!string.IsNullOrEmpty(strWhere))
                {
                    up = up.Where(strWhere, lstParameters);
                }
                return up.ExecuteCommand() > 0;
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-15 10:10:53
            /// 任务编号:中餐
            /// </summary>
            /// <param name="实体">entity</param>
            /// <param name="lstColumns">更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="lstIgnoreColumns">不更新的列,如果为空则不做限制(lstColumns与lstIgnoreColumns互斥)</param>
            /// <param name="whereExpression">条件表达式</param>
            /// <returns>是否成功</returns>
            public bool Update(
             T entity,
             List<string> lstColumns,
             List<string> lstIgnoreColumns,
             Expression<Func<T, bool>> whereExpression)
            {
                IUpdateable<T> up = _db.Updateable(entity);
                if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
                {
                    up = up.IgnoreColumns(it => lstIgnoreColumns.Contains(it));
                }
                if (lstColumns != null && lstColumns.Count > 0)
                {
                    up = up.UpdateColumns(it => lstColumns.Contains(it));
                }
                if (whereExpression != null)
                {
                    up = up.Where(whereExpression);
                }
                return up.ExecuteCommand() > 0;
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-14 15:40:53
            /// 任务编号:中餐
            /// </summary>
            /// <param name="lstColumnValues">列,值</param>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <returns>是否成功</returns>
            public bool Update(
                Dictionary<string, object> lstColumnValues,
                string strWhere,
                List<SugarParameter> lstParameters)
            {
                IUpdateable<T> up = _db.Updateable<T>(lstColumnValues);
                if (!string.IsNullOrEmpty(strWhere))
                {
                    up = up.Where(strWhere, lstParameters);
                }
                return up.ExecuteCommand() > 0;
            }
    
            /// <summary>
            /// 功能描述:修改数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-14 15:42:27
            /// 任务编号:中餐
            /// </summary>
            /// <param name="lstColumnValues">列,值</param>
            /// <param name="whereExpression">条件</param>
            /// <returns>是否成功</returns>
            public bool Update(Dictionary<string, object> lstColumnValues, Expression<Func<T, bool>> whereExpression)
            {
                IUpdateable<T> up = _db.Updateable<T>(lstColumnValues);
                if (whereExpression != null)
                {
                    up = up.Where(whereExpression);
                }
                return up.ExecuteCommand() > 0;
            }
            #endregion
    
            #region/// <summary>
            /// 功能描述:数据条数
            /// 作  者:beck.huang
            /// 创建日期:2018-05-25 18:07:00
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">strWhere</param>
            /// <returns>返回值</returns>
            public int SelectCount(string strWhere)
            {
                return _db.Queryable<T>()
                    .WhereIF(!string.IsNullOrEmpty(strWhere), strWhere)
                    .Count();
            }
            /// <summary>
            /// 功能描述:查询所有数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 14:02:34
            /// 任务编号:中餐
            /// </summary>
            /// <returns>数据列表</returns>
            public List<T> Query()
            {
                return _entityDB.GetList();
            }
    
            /// <summary>
            /// 功能描述:查询数据列表
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:39:11
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <returns>数据列表</returns>
            public List<T> Query(string strWhere)
            {
                return _db.Queryable<T>().WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList();
            }
    
            /// <summary>
            /// 功能描述:查询数据列表
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:40:32
            /// 任务编号:中餐
            /// </summary>
            /// <param name="whereExpression">whereExpression</param>
            /// <returns>数据列表</returns>
            public List<T> Query(Expression<Func<T, bool>> whereExpression)
            {
                return _entityDB.GetList(whereExpression);
            }
            /// <summary>
            /// 功能描述:查询一个列表
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:13:55
            /// 任务编号:中餐
            /// </summary>
            /// <param name="whereExpression">条件表达式</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(Expression<Func<T, bool>> whereExpression, string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToList();
            }
    
            /// <summary>
            /// 功能描述:查询一个列表
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:14:54
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(string strWhere, string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList();
            }
    
            /// <summary>
            /// 功能描述:查询一个列表
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:14:54
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(
                string strWhere,
                List<SugarParameter> lstParameters,
                string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere, lstParameters).ToList();
            }
    
            /// <summary>
            /// 功能描述:查询前N条数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:16:09
            /// 任务编号:中餐
            /// </summary>
            /// <param name="whereExpression">条件表达式</param>
            /// <param name="intTop">前N条</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(
                Expression<Func<T, bool>> whereExpression,
                int intTop,
                string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).Take(intTop).ToList();
            }
    
            /// <summary>
            /// 功能描述:查询前N条数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:17:14
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="intTop">前N条</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(
                string strWhere,
                int intTop,
                string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).Take(intTop).ToList();
            }
    
            /// <summary>
            /// 功能描述:查询前N条数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:17:14
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <param name="intTop">前N条</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(
                string strWhere,
                List<SugarParameter> lstParameters,
                int intTop,
                string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere, lstParameters).Take(intTop).ToList();
            }
    
            /// <summary>
            /// 功能描述:分页查询
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:27:17
            /// 任务编号:中餐
            /// </summary>
            /// <param name="whereExpression">条件表达式</param>
            /// <param name="intPageIndex">页码(下标0)</param>
            /// <param name="intPageSize">页大小</param>
            /// <param name="intTotalCount">数据总量</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(
                Expression<Func<T, bool>> whereExpression,
                int intPageIndex,
                int intPageSize,
                ref int intTotalCount,
                string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToPageList(intPageIndex, intPageSize, ref intTotalCount);
            }
    
            /// <summary>
            /// 功能描述:分页查询
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:29:07
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="intPageIndex">页码(下标0)</param>
            /// <param name="intPageSize">页大小</param>
            /// <param name="intTotalCount">数据总量</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(
              string strWhere,
              int intPageIndex,
              int intPageSize,
              ref int intTotalCount,
              string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToPageList(intPageIndex, intPageSize, ref intTotalCount);
            }
    
            /// <summary>
            /// 功能描述:分页查询
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:29:07
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <param name="intPageIndex">页码(下标0)</param>
            /// <param name="intPageSize">页大小</param>
            /// <param name="intTotalCount">数据总量</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> Query(
              string strWhere,
              List<SugarParameter> lstParameters,
              int intPageIndex,
              int intPageSize,
              ref int intTotalCount,
              string strOrderByFileds)
            {
                return _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere, lstParameters).ToPageList(intPageIndex, intPageSize, ref intTotalCount);
            }
    
            /// <summary>
            /// 功能描述:根据ID查询一条数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:23:21
            /// 任务编号:中餐
            /// </summary>
            /// <param name="objId">id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <returns>数据实体</returns>
            public T QueryByID(object objId)
            {
                return _db.Queryable<T>().InSingle(objId);
            }
            /// <summary>
            /// 功能描述:根据ID查询一条数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-14 16:58:09
            /// 任务编号:中餐
            /// </summary>
            /// <param name="objId">id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <param name="blnUseCache">是否使用缓存</param>
            /// <param name="cacheDurationInSeconds">缓存超时时间(秒)</param>
            /// <returns>数据实体</returns>
            public T QueryByID(
                object objId,
                bool blnUseCache = false,
                int cacheDurationInSeconds = 2147483647)
            {
                return _db.Queryable<T>().WithCacheIF(blnUseCache).InSingle(objId);
            }
    
            /// <summary>
            /// 功能描述:根据ID查询数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 11:23:34
            /// 任务编号:中餐
            /// </summary>
            /// <param name="lstIds">id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <returns>数据实体列表</returns>
            public List<T> QueryByIDs(object[] lstIds)
            {
                return _db.Queryable<T>().In(lstIds).ToList();
            }
            /// <summary>
            /// 功能描述:根据ID查询一条数据
            /// 作  者:beck.huang
            /// 创建日期:2018-05-14 16:58:47
            /// 任务编号:中餐
            /// </summary>
            /// <param name="lstIds">id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件</param>
            /// <param name="blnUseCache">是否使用缓存</param>
            /// <param name="cacheDurationInSeconds">缓存超时时间(秒)</param>
            /// <returns>数据实体列表</returns>
            public List<T> QueryByIDs(
                object[] lstIds,
                bool blnUseCache = false,
                int cacheDurationInSeconds = 2147483647)
            {
                return _db.Queryable<T>().WithCacheIF(blnUseCache).In(lstIds).ToList();
            }
    
    
            #region QueryEntity
            /// <summary>
            /// 功能描述:查询一个实体
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:45:37
            /// 任务编号:中餐
            /// </summary>
            /// <param name="whereExpression">条件表达式</param>
            /// <param name="blnUseCache">是否使用缓存机制</param>
            /// <param name="lstParameters">缓存过期时长</param>
            /// <returns>实体</returns>
            public T QueryEntity(
                Expression<Func<T, bool>> whereExpression,
                bool blnUseCache = false,
                int cacheDurationInSeconds = 2147483647)
            {
                return _db.Queryable<T>().WithCacheIF(blnUseCache, cacheDurationInSeconds).WhereIF(whereExpression != null, whereExpression).First();
            }
    
            /// <summary>
            /// 功能描述:查询一个实体
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:45:44
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <param name="blnUseCache">是否使用缓存机制</param>
            /// <param name="lstParameters">缓存过期时长</param>
            /// <returns>实体</returns>
            public T QueryEntity(
                string strWhere,
                List<SugarParameter> lstParameters = null,
                bool blnUseCache = false,
                int cacheDurationInSeconds = 2147483647)
            {
                return _db.Queryable<T>().WithCacheIF(blnUseCache, cacheDurationInSeconds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere, lstParameters).First();
            }
    
            #endregion
    
            #region QueryList
            /// <summary>
            /// 功能描述:查询一个列表
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:47:14
            /// 任务编号:中餐
            /// </summary>
            /// <param name="blnUseCache">是否使用缓存机制</param>
            /// <param name="lstParameters">缓存过期时长</param>
            /// <returns>返回值</returns>
            public List<T> QueryList(bool blnUseCache = false, int cacheDurationInSeconds = 2147483647)
            {
                return _db.Queryable<T>().WithCacheIF(blnUseCache, cacheDurationInSeconds).ToList();
            }
    
            /// <summary>
            /// 功能描述:查询一个列表
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:50:32
            /// 任务编号:中餐
            /// </summary>
            /// <param name="whereExpression">条件表达式</param>
            /// <param name="intTop">前N条数据</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <param name="blnUseCache">是否使用缓存机制</param>
            /// <param name="lstParameters">缓存过期时长</param>
            /// <returns>数据列表</returns>
            public List<T> QueryList(
                Expression<Func<T, bool>> whereExpression,
                int? intTop = null,
                string strOrderByFileds = null,
                bool blnUseCache = false,
                int cacheDurationInSeconds = 2147483647)
            {
                ISugarQueryable<T> q = _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression);
                if (intTop.HasValue)
                {
                    q = q.Take(intTop.Value);
                }
                return q.WithCacheIF(blnUseCache, cacheDurationInSeconds).ToList();
            }
    
            /// <summary>
            /// 功能描述:查询一个列表
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:52:17
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="lstParameters">参数</param>
            /// <param name="intTop">前N条数据</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <param name="blnUseCache">是否使用缓存机制</param>
            /// <param name="lstParameters">缓存过期时长</param>
            /// <returns>数据列表</returns>
            public List<T> QueryList(
                string strWhere,
                List<SugarParameter> lstParameters = null,
                int? intTop = null,
                string strOrderByFileds = null,
                bool blnUseCache = false,
                int cacheDurationInSeconds = 2147483647)
            {
                ISugarQueryable<T> q = _db.Queryable<T>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere, lstParameters);
                if (intTop.HasValue)
                {
                    q = q.Take(intTop.Value);
                }
                return q.WithCacheIF(blnUseCache, cacheDurationInSeconds).ToList();
            }
            #endregion
    
            #region QueryPage
            /// <summary>
            /// 功能描述:分页查询
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:55:06
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="intTotalCount">数据总数</param>
            /// <param name="intPageIndex">当前页</param>
            /// <param name="intPageSize">页大小</param>
            /// <param name="lstParameters">参数</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> QueryPage(
             string strWhere,
             ref int intTotalCount,
             int intPageIndex = 0,
             int intPageSize = 20,
             List<SugarParameter> lstParameters = null,
             string strOrderByFileds = null)
            {
                return _db.Queryable<T>()
                    .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
                    .WhereIF(!string.IsNullOrEmpty(strWhere), strWhere, lstParameters)
                    .ToPageList(intPageIndex, intPageSize, ref intTotalCount);
            }
    
            /// <summary>
            /// 功能描述:分页查询
            /// 作  者:beck.huang
            /// 创建日期:2018-05-10 10:55:06
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strWhere">条件</param>
            /// <param name="intTotalCount">数据总数</param>
            /// <param name="intPageIndex">当前页</param>
            /// <param name="intPageSize">页大小</param>
            /// <param name="lstParameters">参数</param>
            /// <param name="strOrderByFileds">排序字段,如name asc,age desc</param>
            /// <returns>数据列表</returns>
            public List<T> QueryPage(
             Expression<Func<T, bool>> whereExpression,
             ref int intTotalCount,
             int intPageIndex = 0,
             int intPageSize = 20,
             string strOrderByFileds = null)
            {
                return _db.Queryable<T>()
                    .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
                    .WhereIF(whereExpression != null, whereExpression)
                    .ToPageList(intPageIndex, intPageSize, ref intTotalCount);
            }
            #endregion
    
            /// <summary>
            /// 功能描述:查询Table
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 18:03:14
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strSql">strSql</param>
            /// <param name="lstParameters">参数</param>
            /// <returns>DataTable</returns>
            public DataTable QueryTable(string strSql, SugarParameter[] lstParameters = null)
            {
                return _db.Ado.GetDataTable(strSql, lstParameters);
            }
    
            /// <summary>
            /// 功能描述:查询DataSet
            /// 作  者:beck.huang
            /// 创建日期:2018-05-16 18:06:05
            /// 任务编号:中餐
            /// </summary>
            /// <param name="strSql">strSql</param>
            /// <param name="lstParameters">参数</param>
            /// <returns>DataSet</returns>
            public DataSet QueryDataSet(string strSql, SugarParameter[] lstParameters = null)
            {
                return _db.Ado.GetDataSetAll(strSql, lstParameters);
            }
            #endregion
    
            #region 事务
            /// <summary>
            /// 功能描述:开始事务
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 09:49:49
            /// 任务编号:中餐
            /// </summary>
            public void BeginTran()
            {
                _db.Ado.BeginTran();
            }
    
            /// <summary>
            /// 功能描述:提交事务
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 09:49:57
            /// 任务编号:中餐
            /// </summary>
            public void CommitTran()
            {
                _db.Ado.CommitTran();
            }
    
            /// <summary>
            /// 功能描述:回滚事务
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 09:50:01
            /// 任务编号:中餐
            /// </summary>
            public void RollbackTran()
            {
                _db.Ado.RollbackTran();
            }
            #endregion
    
            #region 其他
            /// <summary>
            /// 功能描述:获取数据库时间
            /// 作  者:beck.huang
            /// 创建日期:2018-05-09 19:41:31
            /// 任务编号:中餐
            /// </summary>
            /// <returns>返回值</returns>
            public DateTime GetDBTime()
            {
                return _db.GetDate();
            }
    
            /// <summary>
            /// 功能描述:清除表缓存
            /// 作  者:beck.huang
            /// 创建日期:2018-05-11 10:15:51
            /// 任务编号:中餐
            /// </summary>
            public void RemoveCache()
            {
                var cacheService = _db.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService;
                string tableName = _db.EntityMaintenance.GetTableName<T>();
                var keys = cacheService.GetAllKey<string>();
                if (keys != null && keys.Count() > 0)
                {
                    foreach (var item in keys)
                    {
                        if (item.ToLower().Contains("." + tableName.ToLower() + "."))
                        {
                            cacheService.Remove<string>(item);
                        }
                    }
                }
            }
    
            /// <summary>
            /// 功能描述:关闭连接
            /// 作  者:beck.huang
            /// 创建日期:2018-05-28 17:37:16
            /// 任务编号:中餐
            /// </summary>
            public void CloseDB()
            {
                if (_context != null && _context.Db != null)
                {
                    _context.Db.Close();
                    _context.Db.Dispose();
                }
            }
            #endregion
    
            #region 事件
            ///// <summary>
            ///// 功能描述:Sql执行完发生
            ///// 作  者:beck.huang
            ///// 创建日期:2018-05-11 10:40:25
            ///// 任务编号:中餐
            ///// </summary>
            ///// <param name="sql">sql</param>
            ///// <param name="pars">pars</param>
            //public virtual void OnLogExecuted(string sql, SugarParameter[] pars)
            //{
    
            //}
            ///// <summary>
            ///// 功能描述:Sql执行前发生
            ///// 作  者:beck.huang
            ///// 创建日期:2018-05-11 10:40:25
            ///// 任务编号:中餐
            ///// </summary>
            ///// <param name="sql">sql</param>
            ///// <param name="pars">pars</param>
            //public virtual void OnLogExecuting(string sql, SugarParameter[] pars)
            //{
    
            //}
            ///// <summary>
            ///// 功能描述:执行SQL 错误时发生
            ///// 作  者:beck.huang
            ///// 创建日期:2018-05-11 10:40:25
            ///// 任务编号:中餐
            ///// </summary>
            ///// <param name="ex">错误</param>
            //public virtual void OnError(Exception ex)
            //{
    
            //}
    
            ///// <summary>
            ///// 功能描述:SQL执行前 可以修改SQL
            ///// 作  者:beck.huang
            ///// 创建日期:2018-05-11 10:47:37
            ///// 任务编号:中餐
            ///// </summary>
            ///// <param name="sql">sql</param>
            ///// <param name="pars">pars</param>
            ///// <returns>返回值</returns>
            //public virtual KeyValuePair<string, SugarParameter[]> OnExecutingChangeSql(string sql, SugarParameter[] pars)
            //{
            //    return new KeyValuePair<string, SugarParameter[]>(sql, pars);
            //}
            #endregion
    
          
        }
    View Code

     HttpRuntimeCache

      1 using SqlSugar;
      2 using System;
      3 using System.Collections;
      4 using System.Collections.Generic;
      5 using System.Linq;
      6 using System.Text;
      7 using System.Web;
      8 using System.Web.Caching;
      9 
     10 namespace Km.DB
     11 {
     12     public class HttpRuntimeCache : ICacheService
     13     {
     14         public void Add<V>(string key, V value)
     15         {
     16             HttpRuntimeCacheHelper<V>.GetInstance().Add(key, value);
     17         }
     18 
     19         public void Add<V>(string key, V value, int cacheDurationInSeconds)
     20         {
     21             HttpRuntimeCacheHelper<V>.GetInstance().Add(key, value, cacheDurationInSeconds);
     22         }
     23 
     24         public bool ContainsKey<V>(string key)
     25         {
     26             return HttpRuntimeCacheHelper<V>.GetInstance().ContainsKey(key);
     27         }
     28 
     29         public V Get<V>(string key)
     30         {
     31             return HttpRuntimeCacheHelper<V>.GetInstance().Get(key);
     32         }
     33 
     34         public IEnumerable<string> GetAllKey<V>()
     35         {
     36             return HttpRuntimeCacheHelper<V>.GetInstance().GetAllKey();
     37         }
     38 
     39         public V GetOrCreate<V>(string cacheKey, Func<V> create, int cacheDurationInSeconds = int.MaxValue)
     40         {
     41             var cacheManager = HttpRuntimeCacheHelper<V>.GetInstance();
     42             if (cacheManager.ContainsKey(cacheKey))
     43             {
     44                 return cacheManager[cacheKey];
     45             }
     46             else
     47             {
     48                 var result = create();
     49                 cacheManager.Add(cacheKey, result, cacheDurationInSeconds);
     50                 return result;
     51             }
     52         }
     53 
     54         public void Remove<V>(string key)
     55         {
     56             HttpRuntimeCacheHelper<V>.GetInstance().Remove(key);
     57         }
     58     }
     59 
     60     internal class HttpRuntimeCacheHelper<V>
     61     {
     62 
     63         #region 全局变量
     64         private static HttpRuntimeCacheHelper<V> _instance = null;
     65         private static readonly object _instanceLock = new object();
     66         #endregion
     67 
     68         #region 构造函数
     69 
     70         private HttpRuntimeCacheHelper() { }
     71         #endregion
     72 
     73         #region  属性
     74         /// <summary>         
     75         ///根据key获取value     
     76         /// </summary>         
     77         /// <value></value>      
     78         public V this[string key]
     79         {
     80             get { return (V)HttpRuntime.Cache[CreateKey(key)]; }
     81         }
     82         #endregion
     83 
     84         #region 公共函数
     85 
     86         /// <summary>         
     87         /// key是否存在       
     88         /// </summary>         
     89         /// <param name="key">key</param>         
     90         /// <returns> ///  存在<c>true</c> 不存在<c>false</c>.        /// /// </returns>         
     91         public bool ContainsKey(string key)
     92         {
     93             return HttpRuntime.Cache[CreateKey(key)] != null;
     94         }
     95 
     96         /// <summary>         
     97         /// 获取缓存值         
     98         /// </summary>         
     99         /// <param name="key">key</param>         
    100         /// <returns></returns>         
    101         public V Get(string key)
    102         {
    103             return (V)HttpRuntime.Cache.Get(CreateKey(key));
    104         }
    105 
    106         /// <summary>         
    107         /// 获取实例 (单例模式)       
    108         /// </summary>         
    109         /// <returns></returns>         
    110         public static HttpRuntimeCacheHelper<V> GetInstance()
    111         {
    112             if (_instance == null)
    113                 lock (_instanceLock)
    114                     if (_instance == null)
    115                         _instance = new HttpRuntimeCacheHelper<V>();
    116             return _instance;
    117         }
    118 
    119         /// <summary>         
    120         /// 插入缓存(默认20分钟)        
    121         /// </summary>         
    122         /// <param name="key"> key</param>         
    123         /// <param name="value">value</param>          
    124         public void Add(string key, V value)
    125         {
    126             Add(key, value, 60 * 20);
    127         }
    128 
    129         /// <summary>         
    130         /// 插入缓存        
    131         /// </summary>         
    132         /// <param name="key"> key</param>         
    133         /// <param name="value">value</param>         
    134         /// <param name="cacheDurationInSeconds">过期时间单位秒</param>         
    135         public void Add(string key, V value, int cacheDurationInSeconds)
    136         {
    137             Add(key, value, cacheDurationInSeconds, CacheItemPriority.Default);
    138         }
    139 
    140         /// <summary>         
    141         /// 插入缓存.         
    142         /// </summary>         
    143         /// <param name="key">key</param>         
    144         /// <param name="value">value</param>         
    145         /// <param name="cacheDurationInSeconds">过期时间单位秒</param>         
    146         /// <param name="priority">缓存项属性</param>         
    147         public void Add(string key, V value, int cacheDurationInSeconds, CacheItemPriority priority)
    148         {
    149             string keyString = CreateKey(key);
    150             HttpRuntime.Cache.Insert(keyString, value, null,
    151             DateTime.Now.AddSeconds(cacheDurationInSeconds), Cache.NoSlidingExpiration, priority, null);
    152         }
    153 
    154         /// <summary>         
    155         /// 插入缓存.         
    156         /// </summary>         
    157         /// <param name="key">key</param>         
    158         /// <param name="value">value</param>         
    159         /// <param name="cacheDurationInSeconds">过期时间单位秒</param>         
    160         /// <param name="priority">缓存项属性</param>         
    161         public void Add(string key, V value, int
    162          cacheDurationInSeconds, CacheDependency dependency, CacheItemPriority priority)
    163         {
    164             string keyString = CreateKey(key);
    165             HttpRuntime.Cache.Insert(keyString, value,
    166              dependency, DateTime.Now.AddSeconds(cacheDurationInSeconds), Cache.NoSlidingExpiration, priority, null);
    167         }
    168 
    169         /// <summary>         
    170         /// 删除缓存         
    171         /// </summary>         
    172         /// <param name="key">key</param>         
    173         public void Remove(string key)
    174         {
    175             HttpRuntime.Cache.Remove(CreateKey(key));
    176         }
    177 
    178         /// <summary>
    179         /// 清除所有缓存
    180         /// </summary>
    181         public void RemoveAll()
    182         {
    183             System.Web.Caching.Cache cache = HttpRuntime.Cache;
    184             IDictionaryEnumerator CacheEnum = cache.GetEnumerator();
    185             ArrayList al = new ArrayList();
    186             while (CacheEnum.MoveNext())
    187             {
    188                 al.Add(CacheEnum.Key);
    189             }
    190             foreach (string key in al)
    191             {
    192                 cache.Remove(key);
    193             }
    194         }
    195 
    196         /// <summary>
    197         /// 清除所有包含关键字的缓存
    198         /// </summary>
    199         /// <param name="removeKey">关键字</param>
    200         public void RemoveAll(Func<string, bool> removeExpression)
    201         {
    202             System.Web.Caching.Cache _cache = System.Web.HttpRuntime.Cache;
    203             var allKeyList = GetAllKey();
    204             var delKeyList = allKeyList.Where(removeExpression).ToList();
    205             foreach (var key in delKeyList)
    206             {
    207                 HttpRuntime.Cache.Remove(key); ;
    208             }
    209         }
    210 
    211         /// <summary>
    212         /// 获取所有缓存key
    213         /// </summary>
    214         /// <returns></returns>
    215         public IEnumerable<string> GetAllKey()
    216         {
    217             IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();
    218             while (CacheEnum.MoveNext())
    219             {
    220                 yield return CacheEnum.Key.ToString();
    221             }
    222         }
    223         #endregion
    224 
    225         #region 私有函数
    226 
    227         /// <summary>         
    228         ///创建KEY   
    229         /// </summary>         
    230         /// <param name="key">Key</param>         
    231         /// <returns></returns>         
    232         private string CreateKey(string key)
    233         {
    234             return key;
    235         }
    236         #endregion
    237     }
    238 }
    View Code

     至于为什么要再封装一层,是为了学习成本,如果不封装,整个项目组大家都要学习Sqlsugar,封装了之后,只需要我自己学习就可以了,别人只用我封装的类就可以

  • 相关阅读:
    ConcurrentSkipListMap 源码分析
    ConcurrentHashMap 源码分析
    CopyOnWriteArrayList 源码分析
    AtomicBoolean 源码分析
    commons-lang3-3.4.jar
    Effective Java
    FindBugs Bug Descriptions
    EasyMock
    Apache Maven 入门
    Eclipse
  • 原文地址:https://www.cnblogs.com/bfyx/p/9125002.html
Copyright © 2011-2022 走看看