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