2013-09-16 32 views
5

Tôi đang sử dụng MiniProfiler để cấu hình các lệnh sql của mình.Nhận SqlBulkCopy hiển thị dưới dạng sql trong MiniProfiler

Một vấn đề mà tôi đang giải quyết bây giờ là lặp lại các câu lệnh INSERT được tạo bởi LINQ.

Tôi đã chuyển đổi chúng thành lệnh SqlBulkCopy, tuy nhiên hiện tại dường như không ghi lại trong chế độ xem sql trong MiniProfiler.

Thậm chí có một chuỗi lệnh được liên kết cho SqlBulkCopy không?

Có thể sao chép hàng loạt để xuất hiện trong danh sách lệnh sql không?

Tôi có thể ít nhất làm cho nó được tính trong bit% sql không?


Tôi biết mình có thể sử dụng MiniProfiler.Current.Step("Doing Bulk Copy") nhưng không được tính là SQL và sẽ không hiển thị trong danh sách với bất kỳ chi tiết nào.


mã hiện dưới đây:

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

Dữ liệu đang được gửi như các gói TDS đặc biệt, nhưng tôi không biết liệu 'RỜI INSERT' đang được khởi xướng sử dụng SQL. Nó hiển thị trong SQL Profiler như SQL, nhưng điều đó có thể là giả mạo. – usr

+2

Tôi đang làm việc trên [MiniProfiler 3.0] (https://github.com/MiniProfiler/dotnet) để thêm lớp 'CustomTiming' chung hơn, cho phép bạn lập hồ sơ" bản sao hàng loạt "và hiển thị nó trong giao diện người dùng theo cùng một cách "sql". Một khi nó ra, tôi sẽ trả lời với một ví dụ. –

+0

@JarrodDixon: Tuyệt vời! Bất kỳ ý tưởng về thời gian (hơn 6-8 tuần)? :) –

Trả lời

3

Bạn sẽ có thể sử dụng CustomTimings đến hồ sơ này. Chúng được bao gồm trong số new v3 version hiện là available on nuget.

Bạn có thể xem một số ví dụ về cách sử dụng CustomTiming trong the sample project nơi điều này được sử dụng để ghi lại các sự kiện http và redis.

Một ví dụ về làm thế nào bạn có thể sử dụng nó với SqlBulkCopy:

string sql = GetBulkCopySql(); // what should show up for the SqlBulkCopy event? 
using (MiniProfiler.Current.CustomTiming("SqlBulkCopy", sql)) 
{ 
    RunSqlBulkCopy(); // run the actual SqlBulkCopy operation 
} 
Các vấn đề liên quan