从DbConnection中获取SqlConnection
本文关键字:SqlConnection 获取 DbConnection | 更新日期: 2023-09-27 18:16:56
我在DbContext
上有一个扩展方法,我想做一个SqlBulkCopy
。因此我需要一个SqlConnection
。来自DbContext的连接来自DbConnection
类型。在其他一些事情中,我尝试了这个:
var connection = new SqlConnection( dbContext.Database.Connection.ConnectionString);
问题是密码丢失(可能是出于安全原因)。
我尝试的另一件事是向上投射:
var bulk_copy = new SqlBulkCopy( (SqlConnection)dbContext.Database.Connection );
实际上假定DbConnection是SqlConnection。在这个非常具体的例子中,它已经出错了。我使用MVC MiniProfiler,它将连接包装到EFProfiledDbConnection
中。EFProfiledDbConnection不继承SqlConnection.
还有其他想法吗?提前感谢!
好吧,如果它们可以共享相同的Connection String
,那么我猜它们都是SqlConnection
。
试试这个:
var connection = rep.Database.Connection as SqlConnection;
解决这个问题的一种可能方法是将Persist Security Info=true
添加到您的连接字符串
我有一个类似的问题ProfiledConnection (hibernatinggrhinos . profiler . appender . profileddataaccess .ProfiledConnection)
,我需要的是SqlConnection,这就成功了:
ProfiledConnection profiledConnection = dbContext.Database.Connection as ProfiledConnection;
SqlConnection sqlConnection = (SqlConnection)profiledConnection.Inner;
迄今为止我发现的唯一方法是使用系统。配置库:
var sqlConnString = ConfigurationManager.ConnectionStrings["your_conn_string_name"].ConnectionString;
var bulkCopy = new SqlBulkCopy(sqlConnString);
可以查看dbContext.Database.Connection
的类型。如果它是一个EFProfiledDbConnection
,你可以得到它的WrappedConnection
属性,它返回一个DbConnection
。这是一个SqlConnection
,如果你使用SQL Server
如果您使用的是较新的。net Core:
new SqlConnection(kontext.Database.GetConnectionString())
你可以这样做:
SqlConnection sqlConn = dbContext.Database.GetConnection<SqlConnection>()
您可以使用:
(SqlConnection)context.Database.GetDbConnection()
创建SQL连接对象的副本,其中包含了pass。