示例#1
0
        /// <summary>
        /// 执行保存在上下文中的SQL语句,在前后增加时间上下下文变量。执行之前会清除DBTimePointActionContext.Current.TimePoint
        /// </summary>
        /// <param name="clearSqlAfterExecute"></param>
        public override void ExecuteTimePointSqlInContext(bool clearSqlAfterExecute = true)
        {
            this.ExecuteSqlInContext((refConnection, db, sql) =>
            {
                DateTime dt = (DateTime)db.ExecuteScalar(CommandType.Text,
                                                         VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) =>
                                                                                                           strB.Append(sql), true));

                DBTimePointActionContext.Current.TimePoint.IsMinValue(() => DBTimePointActionContext.Current.TimePoint = dt);
            },
                                     clearSqlAfterExecute);
        }
        private string GetUpdateSql(string ownerID, string type, SCConditionCollection conditions)
        {
            if (type.IsNullOrEmpty())
            {
                type = "Default";
            }

            conditions.ForEach(c => { c.OwnerID = ownerID; c.Type = type; });

            return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) =>
            {
                ConnectiveSqlClauseCollection connectiveBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder();

                WhereSqlClauseBuilder keyBuilder = new WhereSqlClauseBuilder();

                keyBuilder.AppendItem("OwnerID", ownerID);
                keyBuilder.AppendItem("type", type);

                connectiveBuilder.Add(keyBuilder);

                strB.AppendFormat("UPDATE {0} SET VersionEndTime = {1} WHERE {2}",
                                  this.GetMappingInfo().TableName, "@currentTime", connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

                for (int i = 0; i < conditions.Count; i++)
                {
                    SCCondition condition = conditions[i];

                    condition.SortID = i;
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                    condition.VersionEndTime = ConnectionDefine.MaxVersionEndTime;
                    condition.Type = type;
                    InsertSqlClauseBuilder insertBuilder = ORMapping.GetInsertSqlClauseBuilder(condition, this.GetMappingInfo(), "VersionStartTime");

                    insertBuilder.AppendItem("VersionStartTime", "@currentTime", "=", true);

                    strB.AppendFormat("INSERT INTO {0}{1}", this.GetMappingInfo().TableName, insertBuilder.ToSqlString(TSqlBuilder.Instance));
                }
            }));
        }
示例#3
0
        private string GetUpdateSql(string containerID, SCAclContainerOrMemberCollectionBase members)
        {
            return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(
                       null, (strB, context) =>
            {
                string tableName = this.GetMappingInfo().TableName;

                ConnectiveSqlClauseCollection connectiveBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder();

                WhereSqlClauseBuilder keyBuilder = new WhereSqlClauseBuilder();

                keyBuilder.AppendItem("ContainerID", containerID);

                connectiveBuilder.Add(keyBuilder);

                strB.AppendFormat(
                    "UPDATE {0} SET VersionEndTime = {1} WHERE {2}",
                    tableName,
                    "@currentTime",
                    connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

                for (int i = 0; i < members.Count; i++)
                {
                    SCAclItem aclitem = members[i];

                    aclitem.SortID = i;
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                    aclitem.VersionEndTime = ConnectionDefine.MaxVersionEndTime;

                    InsertSqlClauseBuilder insertBuilder = ORMapping.GetInsertSqlClauseBuilder(aclitem, this.GetMappingInfo(), "VersionStartTime");

                    insertBuilder.AppendItem("VersionStartTime", "@currentTime", "=", true);

                    strB.AppendFormat("INSERT INTO {0}{1}", tableName, insertBuilder.ToSqlString(TSqlBuilder.Instance));
                }
            }));
        }