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