/// <summary>
        /// 在DB上下文中插入一条新日志,用于之入库
        /// </summary>
        /// <param name="data"></param>
        public void InsertDataInContext(UserOperationLog data)
        {
            data.NullCheck("data");

            SqlContextItem sqlContext = this.GetSqlContext();

            this.InnerInsertInContext(data, sqlContext, this.GetFixedContext(), StringExtension.EmptyStringArray);
            sqlContext.AppendSqlInContext(TSqlBuilder.Instance, TSqlBuilder.Instance.DBStatementSeperator);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <param name="sqlContext"></param>
        /// <param name="context"></param>
        /// <param name="ignoreProperties">需要忽略的属性</param>
        /// <returns></returns>
        protected virtual string InnerInsertInContext(T data, SqlContextItem sqlContext, Dictionary <string, object> context, string [] ignoreProperties)
        {
            ORMappingItemCollection mappings = GetMappingInfo(context);

            string sql = this.GetInsertSql(data, mappings, context, ignoreProperties);

            sqlContext.AppendSqlInContext(TSqlBuilder.Instance, sql);

            return(sql);
        }
        /// <summary>
        /// 执行UpdateInContext的时序,操作由应用定义
        /// </summary>
        /// <param name="data"></param>
        /// <param name="updateAction"></param>
        /// <param name="insertAction"></param>
        /// <param name="afterAction"></param>
        protected void DoUpdateInContext(T data,
                                         Action <T, SqlContextItem, Dictionary <string, object> > updateAction,
                                         Action <T, SqlContextItem, Dictionary <string, object> > insertAction,
                                         Action <T, SqlContextItem, Dictionary <string, object> > afterAction = null)
        {
            ExceptionHelper.FalseThrow <ArgumentNullException>(data != null, "data");

            Dictionary <string, object> context = new Dictionary <string, object>();

            SqlContextItem sqlContext = this.GetSqlContext();

            updateAction.IsNotNull(action => action(data, sqlContext, context));

            sqlContext.AppendSqlWithSperatorInContext(TSqlBuilder.Instance, "IF @@ROWCOUNT = 0");

            sqlContext.AppendSqlInContext(TSqlBuilder.Instance, "\nBEGIN\n");
            insertAction.IsNotNull(action => action(data, sqlContext, context));
            sqlContext.AppendSqlInContext(TSqlBuilder.Instance, "\nEND\n");

            afterAction.IsNotNull(action => action(data, sqlContext, context));
        }