2013-09-16 31 views
5

我正在使用MiniProfiler來剖析我的sql命令。獲取SqlBulkCopy在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); 
} 
+0

數據被髮送特殊TDS數據包,但我不知道是否'BULK INSERT'使用SQL正在啓動。它在SQL Profiler中顯示爲SQL,但這可能是假的。 – usr

+2

我正在研究[MiniProfiler 3.0](https://github.com/MiniProfiler/dotnet),它增加了一個更通用的'CustomTiming'類,允許您剖析「批量複製」並將其顯示在UI中與「sql」一樣。一旦出來,我會用一個例子來回答。 –

+0

@JarrodDixon:太好了!任何關於時間表(超過6-8周)的想法? :) –

回答

3

你應該能夠使用CustomTimings剖析這些。這些包含在new v3 version中,現在是available on nuget

您可以在the sample project中看到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 
}