private void DB_OnAfterExecution(object sender, SpExecutionEventArgs e) { if (e.Bag != null) { Timing timing = ((Timing)e.Bag); timing.Stop(e.DataSize, e.Count); } }
public void CommandExecutionErrorInvoke(object sender, SpExecutionEventArgs e) { SpExecutionEventHandler handler = CommandExecutionError; if (handler != null) { handler(sender, e); } }
public void AfterCommandExecutionInvoke(object sender, SpExecutionEventArgs e) { SpExecutionEventHandler handler = AfterCommandExecution; if (handler != null) { handler(sender, e); } }
/// <summary> /// Executes a command, returning a data reader. /// </summary> /// <param name="spName">Name of the Stored Procedure.</param> /// <param name="sqlParameters">The input parameters.</param> /// <returns>A database reader, supporting multiple result sets.</returns> public virtual DbDataReader ExecuteReader(string spName, params SqlParameter[] sqlParameters) { var parameters = new List <string>(); // Prepare parameters foreach (var sqlParameter in sqlParameters) { var p = $"@{sqlParameter.ParameterName}{(sqlParameter.Direction == ParameterDirection.Output || sqlParameter.Direction == ParameterDirection.InputOutput ? " out" : "")}"; parameters.Add(p); } // Open connection Database.Connection.Open(); // Create command var cmd = Database.Connection.CreateCommand(); // Prepare command text cmd.CommandText = $"{spName} {string.Join(",", parameters.ToArray())}"; // Add parameters cmd.Parameters.AddRange(sqlParameters); SpExecutionEventArgs eBefore = new SpExecutionEventArgs(spName, GetSqlCall(cmd.CommandText, sqlParameters)); BeforeCommandExecutionInvoke(this, eBefore); // Execute reader var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); SpExecutionEventArgs eAfter = new SpExecutionEventArgs(eBefore.Bag); AfterCommandExecutionInvoke(this, eAfter); // Example on how to read multiple datasets from the same query // Read Entity1 from the first resultset // var objectContext = ((IObjectContextAdapter)myContext).ObjectContext; //result.Set1 = objectContext.Translate<Entity1>(reader, "Set1", MergeOptions.AppendOnly); // Read Entity2 from the second resultset //reader.NextResult(); //result.Set2 = objectContext.Translate<Entity2>(reader, "Set2", MergeOptions.AppendOnly); return(reader); }
/// <summary> /// Executes a Stored Procedure. /// </summary> /// <typeparam name="T">Type of the resulting objects</typeparam> /// <param name="spName">Name of the Stored Procedure.</param> /// <param name="sqlParameters">The input parameters.</param> /// <returns>A List of the resulting objects</returns> public virtual List <T> ExecuteSp <T>(string spName, params SqlParameter[] sqlParameters) { var parameters = new List <string>(); foreach (var sqlParameter in sqlParameters) { var p = $"@{sqlParameter.ParameterName}{(sqlParameter.Direction == ParameterDirection.Output || sqlParameter.Direction == ParameterDirection.InputOutput ? " out" : "")}"; parameters.Add(p); } var command = $"{spName} {string.Join(",", parameters.ToArray())}"; SpExecutionEventArgs eBefore = new SpExecutionEventArgs(spName, GetSqlCall(command, sqlParameters)); BeforeCommandExecutionInvoke(this, eBefore); List <T> result = Database.SqlQuery <T>(command, sqlParameters).ToList(); SpExecutionEventArgs eAfter = new SpExecutionEventArgs(eBefore.Bag, GetListSize(result), result.Count); AfterCommandExecutionInvoke(this, eAfter); return(result); }
private void DB_OnBeforeExecution(object sender, SpExecutionEventArgs e) { Timing timing = (Timing)MiniProfiler.Current.Step(e.SpName, e.SQL); e.Bag = timing; }