/// <summary> /// Asynchronously saves all changes made in this context to the underlying database. /// </summary> /// <param name="cancellationToken">A <see cref="T:System.Threading.CancellationToken" /> to observe while waiting for the task to complete.</param> /// <returns> /// A task that represents the asynchronous save operation. /// The task result contains the number of objects written to the underlying database. /// </returns> /// <remarks> /// Multiple active operations on the same context instance are not supported. Use 'await' to ensure /// that any asynchronous operations have completed before calling another method on this context. /// </remarks> public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken) { var hookExecution = new HookRunner(this); hookExecution.RunPreActionHooks(); var result = await base.SaveChangesAsync(cancellationToken); hookExecution.RunPostActionHooks(); return result; }
/// <summary> /// Saves all changes made in this context to the underlying database. /// </summary> /// <returns> /// The number of objects written to the underlying database. /// </returns> public override int SaveChanges() { var hookExecution = new HookRunner(this); hookExecution.RunPreActionHooks(); var result = base.SaveChanges(); hookExecution.RunPostActionHooks(); return result; }
private void DoExecute(CommandModel cmd) { Trace.Call(cmd); var handled = false; if (cmd.IsCommand) { switch (cmd.Command) { case "exec": CommandExec(cmd); handled = true; break; case "echo": CommandEcho(cmd); handled = true; break; case "benchmark_message_builder": CommandBenchmarkMessageBuilder(cmd); handled = true; break; case "exception": throw new Exception("You asked for it."); } } if (handled) { // no need to send the command to the engine return; } DateTime start, stop; start = DateTime.UtcNow; handled = f_Session.Command(cmd); IProtocolManager pm = null; if (!handled) { if (cmd.Chat is SessionChatModel && cmd.FrontendManager != null) { pm = cmd.FrontendManager.CurrentProtocolManager; } else { pm = cmd.Chat.ProtocolManager; } // we maybe have no network manager yet if (pm != null) { handled = pm.Command(cmd); } else { handled = false; } } if (!handled) { var filteredCmd = IOSecurity.GetFilteredPath(cmd.Command); var hooks = new HookRunner("frontend", "command-manager", "command-" + filteredCmd); hooks.EnvironmentVariables.Add("FRONTEND_VERSION", FrontendVersion); hooks.Environments.Add(new CommandHookEnvironment(cmd)); hooks.Environments.Add(new ChatHookEnvironment(cmd.Chat)); if (pm != null) { hooks.Environments.Add(new ProtocolManagerHookEnvironment(pm)); } var cmdChar = (string)f_Session.UserConfig["Interface/Entry/CommandCharacter"]; hooks.Commands.Add(new SessionHookCommand(f_Session, cmd.Chat, cmdChar)); if (pm != null) { hooks.Commands.Add(new ProtocolManagerHookCommand(pm, cmd.Chat, cmdChar)); } // show time hooks.Init(); if (hooks.HasHooks) { hooks.Run(); handled = true; } } if (!handled) { Unknown(cmd); } stop = DateTime.UtcNow; f_LastCommandTimeSpan = (stop - start); }