2013-09-16 15 views
5

sql komutlarımı profillemek için MiniProfiler kullanıyorum.MiniProfiler'de sql olarak görünmesi için SqlBulkCopy'yi edinme

Şu anda uğraştığım bir sorun, linq tarafından oluşturulan INSERT ifadeleridir.

Onları bir SqlBulkCopy komutuna dönüştürdüm, ancak şimdi MiniProfiler uygulamasında sql görünümünde görünmüyor.

SqlBulkCopy için ilişkili bir komut dizesi bile olabilir mi?

Toplu kopyanın sql komutları listesinde görünmesini sağlamak mümkün mü?

En azından% sql bit içinde sayılabilir mi? Ben MiniProfiler.Current.Step("Doing Bulk Copy") kullanabilirsiniz ama bu SQL olarak saymak olmaz ve herhangi bir ayrıntı listesinde gösterme olmaz


ben farkındayım. Aşağıda


Güncel kodu:

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

veri özel TDS paketleri olarak gönderiliyor, ama 'DÖKME INSERT' SQL kullanarak başlatıldı olup olmadığını bilmiyorum. SQL Profiler'de SQL olarak görünür, ancak bu sahte olabilir. – usr

+2

Daha fazla genel bir 'CustomTiming' sınıfı ekleyen, "toplu kopya" profilini oluşturmanıza ve kullanıcı arabiriminde görünmesine izin veren [MiniProfiler 3.0] (https://github.com/MiniProfiler/dotnet) üzerinde çalışıyorum. "sql" ile aynı şekilde yapar. Bir kez bittiğinde, bir örnekle cevaplayacağım. –

+0

@JarrodDixon: Harika! Zaman ölçeği ile ilgili herhangi bir fikir (6-8 haftadan fazla)? :) –

cevap

3

Bu profile CustomTimings kullanmak mümkün olmalıdır. Bunlar, şimdi available on nuget olan new v3 version'da bulunur.

Bu örnekte, http ve redis olaylarını kaydetmek için kullanılan CustomTiming'un the sample project numaralı kullanım örneklerini görebilirsiniz.

sen SqlBulkCopy ile kullanmak nasıl bir örnek

:

string sql = GetBulkCopySql(); // what should show up for the SqlBulkCopy event? 
using (MiniProfiler.Current.CustomTiming("SqlBulkCopy", sql)) 
{ 
    RunSqlBulkCopy(); // run the actual SqlBulkCopy operation 
} 
İlgili konular