public virtual CommitResult Commit(JArray log) { _commitResult = new CommitResult(); try { if (log.Count > 0) { using (var tx = new DataTransaction(LoadConfig(((string)(log[0]["controller"]))).ConnectionStringName)) { var index = -1; var sequence = -1; var lastSequence = sequence; var commitedValueCount = _commitResult.Values.Count; var transactionScope = ((string)(ApplicationServices.Settings("odp.transactions.scope"))); for (var i = 0; (i < log.Count); i++) { var entry = log[i]; var controller = ((string)(entry["controller"])); var view = ((string)(entry["view"])); ActionArgs.Forget(); var executeArgs = entry["args"].ToObject <ActionArgs>(); if (executeArgs.Sequence.HasValue) { sequence = executeArgs.Sequence.Value; if (transactionScope != "all" && (sequence != lastSequence && (i > 0))) { tx.Commit(); _commitResult.Sequence = lastSequence; commitedValueCount = _commitResult.Values.Count; tx.BeginTransaction(); } lastSequence = sequence; } var config = LoadConfig(executeArgs.Controller); ProcessArguments(config, executeArgs); var executeResult = ControllerFactory.CreateDataController().Execute(controller, view, executeArgs); if (executeResult.Errors.Count > 0) { index = i; _commitResult.Index = index; _commitResult.Errors = executeResult.Errors.ToArray(); break; } else { ProcessResult(config, executeResult); } } if (index == -1) { tx.Commit(); _commitResult.Sequence = sequence; commitedValueCount = _commitResult.Values.Count; } else { tx.Rollback(); _commitResult.Index = index; _commitResult.Values.RemoveRange(commitedValueCount, (_commitResult.Values.Count - commitedValueCount)); } } } } catch (Exception ex) { _commitResult.Errors = new string[] { ex.Message }; _commitResult.Index = 0; } return(_commitResult); }
public virtual CommitResult Commit(JArray log) { _commitResult = new CommitResult(); try { if (log.Count > 0) { using (DataConnection connection = new DataConnection(LoadConfig(((string)(log[0]["controller"]))).ConnectionStringName, true)) { int index = -1; int sequence = -1; int lastSequence = sequence; string transactionScope = ((string)(ApplicationServices.Settings("odp.transactions.scope"))); for (int i = 0; (i < log.Count); i++) { JToken entry = log[i]; string controller = ((string)(entry["controller"])); string view = ((string)(entry["view"])); ActionArgs executeArgs = entry["args"].ToObject <ActionArgs>(); if (executeArgs.Sequence.HasValue) { sequence = executeArgs.Sequence.Value; if ((transactionScope == "sequence") && (sequence != lastSequence && (i > 0))) { connection.Commit(); _commitResult.Sequence = lastSequence; connection.BeginTransaction(); } lastSequence = sequence; } ControllerConfiguration config = LoadConfig(executeArgs.Controller); ProcessArguments(config, executeArgs); ActionResult executeResult = ControllerFactory.CreateDataController().Execute(controller, view, executeArgs); if (executeResult.Errors.Count > 0) { index = i; _commitResult.Index = index; _commitResult.Errors = executeResult.Errors.ToArray(); break; } else { ProcessResult(config, executeResult); } } if (index == -1) { connection.Commit(); _commitResult.Sequence = sequence; } else { connection.Rollback(); _commitResult.Index = index; } } } } catch (Exception ex) { _commitResult.Errors = new string[] { ex.Message }; _commitResult.Index = 0; } return(_commitResult); }