/// <summary>
        /// 增加一条记录,返回新的ID号。需要有一个单一主键,并且开启有标识符属性(异步方式)
        /// </summary>
        /// <param name="entity">实体模型</param>
        /// <returns></returns>
        public virtual async Task <int> InsertAsync(StatVisitorEntity entity)
        {
            Dictionary <string, object> dict = new Dictionary <string, object>();

            GetParameters(entity, dict);

            string strSQL = "insert into StatVisitor (" +
                            "VTime," +
                            "Ip," +
                            "Address," +
                            "System," +
                            "Browser," +
                            "Screen," +
                            "Color," +
                            "Referer," +
                            "Timezone) " +
                            "values(" +
                            "@VTime," +
                            "@Ip," +
                            "@Address," +
                            "@System," +
                            "@Browser," +
                            "@Screen," +
                            "@Color," +
                            "@Referer," +
                            "@Timezone)";

            return(await Task.Run(() => _DB.ReturnID(strSQL, dict)));
        }
        /// <summary>
        /// 增加一条记录
        /// </summary>
        /// <param name="entity">实体模型</param>
        /// <returns></returns>
        public virtual bool Add(StatVisitorEntity entity)
        {
            Dictionary <string, object> dict = new Dictionary <string, object>();

            GetParameters(entity, dict);

            string strSQL = "insert into StatVisitor (" +
                            "VTime," +
                            "Ip," +
                            "Address," +
                            "System," +
                            "Browser," +
                            "Screen," +
                            "Color," +
                            "Referer," +
                            "Timezone) " +
                            "values(" +
                            "@VTime," +
                            "@Ip," +
                            "@Address," +
                            "@System," +
                            "@Browser," +
                            "@Screen," +
                            "@Color," +
                            "@Referer," +
                            "@Timezone)";

            return(_DB.ExeSQLResult(strSQL, dict));
        }
 /// <summary>
 /// 把实体类转换成键/值对集合
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="dict"></param>
 private static void GetParameters(StatVisitorEntity entity, Dictionary <string, object> dict)
 {
     dict.Add("ID", entity.ID);
     dict.Add("VTime", entity.VTime);
     dict.Add("Ip", entity.Ip);
     dict.Add("Address", entity.Address);
     dict.Add("System", entity.System);
     dict.Add("Browser", entity.Browser);
     dict.Add("Screen", entity.Screen);
     dict.Add("Color", entity.Color);
     dict.Add("Referer", entity.Referer);
     dict.Add("Timezone", entity.Timezone);
 }
        /// <summary>
        /// 获取实体(异步方式)
        /// </summary>
        /// <param name="strWhere">参数化查询条件(例如: and Name = @Name )</param>
        /// <param name="dict">参数的名/值集合</param>
        /// <returns></returns>
        public virtual async Task <StatVisitorEntity> GetEntityAsync(string strWhere, Dictionary <string, object> dict = null)
        {
            StatVisitorEntity obj    = null;
            string            strSQL = "select top 1 * from StatVisitor where 1=1 " + strWhere;

            using (NullableDataReader reader = await Task.Run(() => _DB.GetDataReader(strSQL, dict)))
            {
                if (reader.Read())
                {
                    obj = GetEntityFromrdr(reader);
                }
            }
            return(obj);
        }
        /// <summary>
        /// 通过数据读取器生成实体类
        /// </summary>
        /// <param name="rdr"></param>
        /// <returns></returns>
        private static StatVisitorEntity GetEntityFromrdr(NullableDataReader rdr)
        {
            StatVisitorEntity info = new StatVisitorEntity();

            info.ID       = rdr.GetInt32("ID");
            info.VTime    = rdr.GetNullableDateTime("VTime");
            info.Ip       = rdr.GetString("Ip");
            info.Address  = rdr.GetString("Address");
            info.System   = rdr.GetString("System");
            info.Browser  = rdr.GetString("Browser");
            info.Screen   = rdr.GetString("Screen");
            info.Color    = rdr.GetString("Color");
            info.Referer  = rdr.GetString("Referer");
            info.Timezone = rdr.GetInt32("Timezone");
            return(info);
        }
        /// <summary>
        /// 更新一条记录(异步方式)
        /// </summary>
        /// <param name="entity">实体模型</param>
        /// <returns></returns>
        public virtual async Task <bool> UpdateAsync(StatVisitorEntity entity)
        {
            Dictionary <string, object> dict = new Dictionary <string, object>();

            GetParameters(entity, dict);
            string strSQL = "Update StatVisitor SET " +
                            "VTime = @VTime," +
                            "Ip = @Ip," +
                            "Address = @Address," +
                            "System = @System," +
                            "Browser = @Browser," +
                            "Screen = @Screen," +
                            "Color = @Color," +
                            "Referer = @Referer," +
                            "Timezone = @Timezone" +
                            " WHERE " +

                            "ID = @ID";

            return(await Task.Run(() => _DB.ExeSQLResult(strSQL, dict)));
        }
 /// <summary>
 /// 增加或更新一条记录(异步方式)
 /// </summary>
 /// <param name="entity">实体模型</param>
 /// <param name="IsSave">是否增加</param>
 /// <returns></returns>
 public virtual async Task <bool> AddOrUpdateAsync(StatVisitorEntity entity, bool IsSave)
 {
     return(IsSave ? await AddAsync(entity) : await UpdateAsync(entity));
 }
 /// <summary>
 /// 增加或更新一条记录
 /// </summary>
 /// <param name="entity">实体模型</param>
 /// <param name="IsSave">是否增加</param>
 /// <returns></returns>
 public virtual bool AddOrUpdate(StatVisitorEntity entity, bool IsSave)
 {
     return(IsSave ? Add(entity) : Update(entity));
 }