gpt4 book ai didi

c# - 如何使用 SqlBulkCopy 并使用 Glimpse 跟踪批量插入

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:13 24 4
gpt4 key购买 nike

在我们的应用程序中,我们使用 SqlBulkCopy 类来促进数据库的批量加载。最近,我尝试将 Glimpse 添加到我们的解决方案中,但代码因转换无效而失败:

System.InvalidCastException: Unable to cast object of type 'Glimpse.Ado.AlternateType.GlimpseDbConnection' to type 'System.Data.SqlClient.SqlConnection'

这是因为 Glimpse ADO 正在使用包装的 SqlConnection 来实现它的魔力。不幸的是,SqlBulkCopy 需要一个 SqlConnection,所以我需要转换 DbConnection

是否没有开箱即用的方法来分析批量插入?到目前为止,我遇到的唯一解决方法是:

(SqlConnection)((GlimpseDbConnection)dbConnection).InnerConnection

它很丑陋,因为它需要显式引用 GlimpseDbConnection,并且可能还需要添加自定义时间线事件以获得一些跟踪。没有解决这个问题的 Glimpse 插件吗?

最佳答案

我正在使用这种方法(使用 EntityFramework 的 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);
}

关于c# - 如何使用 SqlBulkCopy 并使用 Glimpse 跟踪批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36779218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com