/// <summary> /// Updates the <see cref="DbRuleObject"/> list in the database. So therefore all <see cref="DbRule"/> objects and <see cref="DbCondition"/> objects contained in the argument are updated. /// </summary> /// <param name="dbRuleObjectList">The <see cref="DbRuleObject"/> list to update.</param> /// <param name="cancellationTokenSource">The <see cref="CancellationTokenSource"/>.</param> /// <returns>The count of records affected</returns> public static int UpdateDbRuleObjectsToDatabase(List <DbRuleObject> dbRuleObjectList, CancellationTokenSource cancellationTokenSource) { CancellationToken cancellationToken = cancellationTokenSource.Token; int count = 0; List <DbRule> dbRuleList = dbRuleObjectList.Select(o => o.DbRule).ToList(); ConnectionInfo connectionInfo = new ConnectionInfo(Globals.ConfigurationManager.DatabaseConnectionString, Globals.ConfigurationManager.DatabaseProviderType); try { // Update all the DbRules Task updateRules = DbRuleService.UpdateAsync(connectionInfo, dbRuleList, cancellationTokenSource, Globals.ConfigurationManager.TimeoutSecondsForDatabaseTasks); count += dbRuleList.Count; List <DbCondition> dbConditionList = new List <DbCondition>(); foreach (DbRuleObject dbRuleObject in dbRuleObjectList) { dbConditionList.AddRange(dbRuleObject.DbConditions); } //Update all the DbConditions Task updateConditions = DbConditionService.UpdateAsync(connectionInfo, dbConditionList, cancellationTokenSource, Globals.ConfigurationManager.TimeoutSecondsForDatabaseTasks); count += dbConditionList.Count; Task.WaitAll(updateRules, updateConditions); } catch (Exception) { cancellationTokenSource.Cancel(); throw; } return(count); }
/// <summary> /// Updates the <see cref="DbRuleObject"/> list in the database. So therefore all <see cref="DbRule"/> objects and <see cref="DbCondition"/> objects contained in the argument are updated. /// </summary> /// <param name="dbRuleObjectList">The <see cref="DbRuleObject"/> list to update.</param> /// <param name="cancellationTokenSource">The <see cref="CancellationTokenSource"/>.</param> /// <returns>The count of records affected</returns> public static int UpdateDbRuleObjectsToDatabase(List <DbRuleObject> dbRuleObjectList, CancellationTokenSource cancellationTokenSource) { CancellationToken cancellationToken = cancellationTokenSource.Token; int count = 0; List <DbRule> dbRuleList = dbRuleObjectList.Select(o => o.DbRule).ToList(); ConnectionInfo connectionInfo = new(Globals.ConfigurationManager.DatabaseConnectionString, Globals.ConfigurationManager.DatabaseProviderType); try { // Update all the DbRules Task updateRulesTask = DbRuleService.UpdateAsync(connectionInfo, dbRuleList, cancellationTokenSource, Globals.ConfigurationManager.TimeoutSecondsForDatabaseTasks); count += dbRuleList.Count; // Get list of existing conditions to be deleted. List <DbCondition> dbConditionsToDelete = new(); foreach (DbRuleObject dbRuleObject in dbRuleObjectList) { dbConditionsToDelete.AddRange(dbRuleObject.DbConditionsToBeDeleted); } // Get list of conditions to be inserted. List <DbCondition> dbConditionsToInsert = new(); foreach (DbRuleObject dbRuleObject in dbRuleObjectList) { dbConditionsToInsert.AddRange(dbRuleObject.DbConditions); } // Delete all the DbConditions. Task deleteConditionsTask = DbConditionService.DeleteAsync(connectionInfo, dbConditionsToDelete, cancellationTokenSource, Globals.ConfigurationManager.TimeoutSecondsForDatabaseTasks); //Insert (re-create) all the DbConditions. Task insertConditionsTask = DbConditionService.InsertAsync(connectionInfo, dbConditionsToInsert, cancellationTokenSource, Globals.ConfigurationManager.TimeoutSecondsForDatabaseTasks); count += dbConditionsToInsert.Count; Task.WaitAll(updateRulesTask, deleteConditionsTask, insertConditionsTask); } catch (Exception) { cancellationTokenSource.Cancel(); throw; } return(count); }