Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sqlContext"></param>
        /// <param name="condition"></param>
        /// <param name="orderByBuilder"></param>
        /// <param name="afterLoadAction"></param>
        /// <param name="action"></param>
        /// <param name="createNewAction"></param>
        /// <param name="timePoint"></param>
        /// <param name="tableName"></param>
        /// <param name="mappings"></param>
        public void RegisterLoadByBuilderInContext(SqlContextItem sqlContext, string condition, OrderBySqlClauseBuilder orderByBuilder, Action <TCollection> afterLoadAction, Action <TCollection> action, Func <DataRow, T> createNewAction, DateTime timePoint, string tableName, ORMappingItemCollection mappings)
        {
            if (mappings == null)
            {
                mappings = this.GetQueryMappingInfo();
            }

            if (tableName.IsNullOrEmpty())
            {
                tableName = GetQueryTableName(mappings, timePoint);
            }

            string sql = GetLoadSqlByBuilder(condition, orderByBuilder, timePoint, tableName);

            this.RegisterQueryData(sqlContext, tableName, mappings, sql, (collection) =>
            {
                if (afterLoadAction != null)
                {
                    afterLoadAction(collection);
                }

                if (action != null)
                {
                    action(collection);
                }
            },
                                   createNewAction);
        }
        /// <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>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <param name="sqlContext"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        protected virtual string InnerDeleteInContext(T data, SqlContextItem sqlContext, Dictionary <string, object> context)
        {
            ORMappingItemCollection mappings = GetMappingInfo(context);

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

            sqlContext.AppendSqlWithSperatorInContext(TSqlBuilder.Instance, sql);

            return(sql);
        }
        /// <summary>
        /// 在上下文中生成删除数据的SQL(时间封口)
        /// </summary>
        /// <param name="data"></param>
        /// <param name="ignoreProperties"></param>
        public void DeleteInContext(T data, params string[] ignoreProperties)
        {
            data.NullCheck("data");

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

            SqlContextItem sqlContext = this.GetSqlContext();

            this.BeforeInnerDeleteInContext(data, sqlContext, context);

            string sql = VersionStrategyUpdateSqlBuilder <T> .DefaultInstance.ToDeleteSql(data, this.GetMappingInfo(), false, ignoreProperties);

            sqlContext.AppendSqlWithSperatorInContext(TSqlBuilder.Instance, sql);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <param name="deletetAction"></param>
        /// <param name="afterAction"></param>
        protected void DoDeleteInContext(T data,
                                         Action <T, SqlContextItem, Dictionary <string, object> > deletetAction,
                                         Action <T, SqlContextItem, Dictionary <string, object> > afterAction = null)
        {
            ExceptionHelper.FalseThrow <ArgumentNullException>(data != null, "data");

            SqlContextItem sqlContext = this.GetSqlContext();

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

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

            afterAction.IsNotNull(action => action(data, sqlContext, context));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="ownerKeyBuilder"></param>
        /// <param name="data"></param>
        /// <param name="ignoreProperties">需要忽略的属性</param>
        public void UpdateCollectionInContext(IConnectiveSqlClause ownerKeyBuilder, IEnumerable <T> data, params string[] ignoreProperties)
        {
            ownerKeyBuilder.NullCheck("ownerKeyBuilder");
            data.NullCheck("objs");

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

            SqlContextItem sqlContext = this.GetSqlContext();

            this.BeforeInnerUpdateCollectionInContext(data, sqlContext, context);

            string sql = VersionStrategyUpdateSqlBuilder <T> .DefaultInstance.ToUpdateCollectionSql(ownerKeyBuilder, this.GetMappingInfo(), data, false, ignoreProperties);

            sqlContext.AppendSqlWithSperatorInContext(TSqlBuilder.Instance, sql);
        }
        /// <summary>
        /// 在上下文中注册查询返回的结果
        /// </summary>
        /// <param name="sqlContext">Sql语句上下文</param>
        /// <param name="tableName"></param>
        /// <param name="mapping"></param>
        /// <param name="sql"></param>
        /// <param name="action"></param>
        /// <param name="createNewAction"></param>
        public void RegisterQueryData(SqlContextItem sqlContext, string tableName, ORMappingItemCollection mapping, string sql, Action <TCollection> action, Func <DataRow, T> createNewAction)
        {
            sqlContext.NullCheck("sqlContext");

            sqlContext.AppendSqlWithSperatorInContext(TSqlBuilder.Instance, sql);
            sqlContext.RegisterTableAction(tableName, (table) =>
            {
                TCollection collection = this.DataTableToCollection(mapping, table, createNewAction);

                if (action != null)
                {
                    action(collection);
                }
            });
        }
        /// <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));
        }
        /// <summary>
        /// 在上下文中添加删除对象的脚本
        /// </summary>
        /// <param name="whereAction"></param>
        public virtual void DeleteInContext(Action <WhereSqlClauseBuilder> whereAction)
        {
            whereAction.NullCheck("whereAction");

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            whereAction(builder);

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

            SqlContextItem sqlContext = this.GetSqlContext();

            this.BeforeInnerDeleteInContext(builder, sqlContext, context);

            string sql = this.GetDeleteSql(builder, context);

            if (sql.IsNotEmpty())
            {
                sqlContext.AppendSqlWithSperatorInContext(TSqlBuilder.Instance, sql);

                this.AfterInnerDeleteInContext(builder, context);
            }
        }
 /// <summary>
 /// 在上下文中更新集合对象前
 /// </summary>
 /// <param name="data"></param>
 /// <param name="sqlContext"></param>
 /// <param name="context"></param>
 protected virtual void BeforeInnerUpdateCollectionInContext(IEnumerable <T> data, SqlContextItem sqlContext, Dictionary <string, object> context)
 {
 }
 /// <summary>
 /// 在上下文中更新单一对象前
 /// </summary>
 /// <param name="data"></param>
 /// <param name="sqlContext"></param>
 /// <param name="context"></param>
 protected virtual void BeforeInnerUpdateInContext(T data, SqlContextItem sqlContext, Dictionary <string, object> context)
 {
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="sqlContext"></param>
 /// <param name="context"></param>
 protected virtual void AfterInnerDeleteInContext(WhereSqlClauseBuilder builder, SqlContextItem sqlContext, Dictionary <string, object> context)
 {
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="data"></param>
 /// <param name="sqlContext"></param>
 /// <param name="context"></param>
 protected virtual void AfterInnerDeleteInContext(T data, SqlContextItem sqlContext, Dictionary <string, object> context)
 {
 }