/// <summary>
        ///
        /// </summary>
        /// <param name="ownerKeyBuilder"></param>
        /// <param name="mapping"></param>
        /// <param name="newObjs"></param>
        /// <param name="addCurrentTimeVar">是否添加@currentTime变量</param>
        /// <param name="ignoreProperties">需要忽略的属性</param>
        /// <returns></returns>
        public string ToUpdateCollectionSql(IConnectiveSqlClause ownerKeyBuilder, ORMappingItemCollection mapping, IEnumerable <T> newObjs, bool addCurrentTimeVar = true, params string[] ignoreProperties)
        {
            return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) =>
            {
                ConnectiveSqlClauseCollection existedKeys = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

                foreach (T obj in newObjs)
                {
                    if (obj != null)
                    {
                        if (strB.Length > 0)
                        {
                            strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                        }

                        this.PrepareSingleObjectUpdateSql(strB, obj, mapping, false,
                                                          () => this.PrepareUpdateCollectionItemSql(obj, mapping, ignoreProperties),
                                                          () => this.PrepareInsertSql(obj, mapping, ignoreProperties),
                                                          ignoreProperties);

                        WhereSqlClauseBuilder keyBuilder = GetExistedKeysBuilder(ownerKeyBuilder, obj, mapping);

                        existedKeys.Add(keyBuilder);
                    }
                }

                if (strB.Length > 0)
                {
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                }

                strB.Append(this.PrepareUpdateNotMatchedCollectionItemSql(ownerKeyBuilder, existedKeys, mapping));
            },
                                                                     addCurrentTimeVar));
        }
        /// <summary>
        /// 生成删除数据的SQL(时间封口)
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="mapping"></param>
        /// <param name="getDeleteSql"></param>
        /// <param name="addCurrentTimeVar"></param>
        /// <param name="ignoreProperties"></param>
        /// <returns></returns>
        public string ToDeleteSql(T obj, ORMappingItemCollection mapping, Func <string> getDeleteSql, bool addCurrentTimeVar = true, params string[] ignoreProperties)
        {
            obj.NullCheck("obj");
            mapping.NullCheck("mapping");
            getDeleteSql.NullCheck("getDeleteSql");

            return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) =>
            {
                strB.Append(getDeleteSql());
            },
                                                                     addCurrentTimeVar));
        }
        /// <summary>
        /// 生成Update和Insert混合的子句。先Update,然后通过RowCount判断是需要Insert。其中Update子句可以自己构造
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="mapping"></param>
        /// <param name="getUpdateSql"></param>
        /// <param name="getInsertSql"></param>
        /// <param name="addCurrentTimeVar">是否添加@currentTime变量</param>
        /// <param name="ignoreProperties">需要忽略的属性</param>
        /// <returns></returns>
        public string ToUpdateSql(T obj, ORMappingItemCollection mapping, Func <string> getUpdateSql, Func <string> getInsertSql, bool addCurrentTimeVar = true, params string[] ignoreProperties)
        {
            obj.NullCheck("obj");
            mapping.NullCheck("mapping");
            getUpdateSql.NullCheck("getUpdateSql");
            getInsertSql.NullCheck("getInsertSql");

            return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) =>
            {
                this.PrepareSingleObjectUpdateSql(strB, obj, mapping, true, getUpdateSql, getInsertSql, ignoreProperties);
            },
                                                                     addCurrentTimeVar));
        }
Beispiel #4
0
        public string ToUpdateSql(T obj, ORMappingItemCollection mapping)
        {
            return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) =>
            {
                if (obj.VersionStartTime != DateTime.MinValue)
                {
                    strB.Append(PrepareUpdateSql(obj, mapping));

                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                    strB.AppendFormat("IF @@ROWCOUNT > 0\n");
                    strB.AppendFormat("\t{0}\n", PrepareInsertSql(obj, mapping));
                    strB.AppendFormat("ELSE\n");
                    strB.AppendFormat("\tRAISERROR ({0}, 16, 1)",
                                      TSqlBuilder.Instance.CheckUnicodeQuotationMark(string.Format("对象\"{0}\"的版本不是最新的,不能更新", obj.ID)));
                }
                else
                {
                    strB.Append(PrepareInsertSql(obj, mapping));
                }
            }));
        }