/// <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)); }
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)); } })); }