/// <summary>检查是否支持读写分离</summary> /// <param name="dal"></param> /// <param name="sql"></param> /// <param name="action"></param> /// <returns></returns> public virtual Boolean Validate(DAL dal, String sql, String action) { // 事务中不支持分离 if (dal.ReadOnly == null) { return(false); } if (dal.Session.Transaction != null) { return(false); } if (!action.EqualIgnoreCase("Select", "SelectCount", "Query")) { return(false); } if (action == "ExecuteScalar" && !sql.TrimStart().StartsWithIgnoreCase("select ")) { return(false); } // 判断是否忽略的时间区间 var span = DateTime.Now - DateTime.Today; foreach (var item in IgnoreTimes) { if (span >= item.Start && span < item.End) { return(false); } } // 是否忽略的表名 if (!sql.IsNullOrEmpty()) { var tables = DAL.GetTables(sql); foreach (var item in tables) { if (IgnoreTables.Contains(item)) { return(false); } } } return(true); }