让SqlBulkCopy在MiniProfiler中显示为sql

Geo*_*ett 5 c# sqlbulkcopy mvc-mini-profiler

我正在使用MiniProfiler来配置我的sql命令.

我正在处理的一个问题是由linq生成的重复INSERT语句.

我已将它们转换为SqlBulkCopy命令,但现在它似乎没有将它记录在MiniProfiler的sql视图中.

是否会为SqlBulkCopy提供相关的命令字符串?

是否可以将批量副本显示在sql命令列表中?

我至少可以在%sql位中计算它吗?


我知道我可以使用MiniProfiler.Current.Step("Doing Bulk Copy")但不会算作SQL,并且不会在列表中显示任何细节.


目前的代码如下:

public static void BulkInsertAll<T>(this DataContext dc, IEnumerable<T> entities)
{
    var conn = (dc.Connection as ProfiledDbConnection).InnerConnection as SqlConnection;
    conn.Open();

    Type t = typeof(T);

    var tableAttribute = (TableAttribute)t.GetCustomAttributes(
        typeof(TableAttribute), false).Single();
    var bulkCopy = new SqlBulkCopy(conn)
    {
        DestinationTableName = tableAttribute.Name
    };

    //....

    bulkCopy.WriteToServer(table);
}
Run Code Online (Sandbox Code Playgroud)

Yaa*_*lis 5

您应该能够使用CustomTimings这些来分析。这些包含在新的 v3 版本中,现已在 nuget 上提供

CustomTiming您可以在示例项目中看到一些示例用法,其中用于记录 http 和 redis 事件。

如何使用它的示例SqlBulkCopy

string sql = GetBulkCopySql(); // what should show up for the SqlBulkCopy event?
using (MiniProfiler.Current.CustomTiming("SqlBulkCopy", sql)) 
{
  RunSqlBulkCopy(); // run the actual SqlBulkCopy operation
}
Run Code Online (Sandbox Code Playgroud)