/// <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);
        }