让 SqlBulkCopy 在 MiniProfiler 中显示为 sql
本文关键字:显示 sql MiniProfiler SqlBulkCopy | 更新日期: 2023-09-27 18:31:39
我正在使用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);
}
您应该能够使用CustomTimings
来分析这些内容。这些包含在 nuget 上现在可用的新 v3 版本中。
您可以在示例项目中查看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
}