在我们的应用程序中,我们使用SqlBulkCopy
类来促进批量加载数据库。最近,我试图将Glimpse添加到我们的解决方案中,但代码失败并且无效的转换:
System.InvalidCastException:无法将类型为“Glimpse.Ado.AlternateType.GlimpseDbConnection”的对象强制转换为“System.Data.SqlClient.SqlConnection”
这是因为Glimpse ADO正在使用包裹SqlConnection
来实现其魔力。很遗憾,SqlBulkCopy
需要SqlConnection
,因此我需要投放DbConnection
。
是否没有开箱即用的方式来分析批量插入?到目前为止,我遇到的唯一解决方法是:
(SqlConnection)((GlimpseDbConnection)dbConnection).InnerConnection
它很难看,因为它需要显式引用GlimpseDbConnection,并且可能还需要添加自定义时间线事件来获取一些跟踪。 是否没有解决这个问题的Glimpse插件?
答案 0 :(得分:0)
我正在使用这种方法(使用EntityFramework' s DbContext
),它似乎有效:
DbContext Db = /* ... */;
var glimpseDbConnection = Db.Database.Connection as GlimpseDbConnection;
var sqlConnection = glimpseDbConnection != null ? (SqlConnection)glimpseDbConnection.InnerConnection : (SqlConnection)Db.Database.Connection;
var glimpseDbTransaction = Db.Database.CurrentTransaction.UnderlyingTransaction as GlimpseDbTransaction;
var sqlTransaction = glimpseDbTransaction != null ? (SqlTransaction)glimpseDbTransaction.InnerTransaction : (SqlTransaction)Db.Database.CurrentTransaction.UnderlyingTransaction;
using (var bulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.Default, sqlTransaction))
{
var dataTable = /* ... */;
bulkCopy.BatchSize = 2000;
bulkCopy.BulkCopyTimeout = TimeSpan.FromMinutes(5).Seconds;
bulkCopy.DestinationTableName = /* ... */;
bulkCopy.WriteToServer(dataTable);
}