从DbConnection获取SqlConnection
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从DbConnection获取SqlConnection相关的知识,希望对你有一定的参考价值。
我在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上遇到了类似的问题(HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledConnection)
我需要的是SqlConnection,这就是诀窍:
ProfiledConnection profiledConnection = dbContext.Database.Connection as ProfiledConnection;
SqlConnection sqlConnection = (SqlConnection)profiledConnection.Inner;
到目前为止我发现的唯一方法是使用System.Configuration库:
var sqlConnString = ConfigurationManager.ConnectionStrings["your_conn_string_name"].ConnectionString;
var bulkCopy = new SqlBulkCopy(sqlConnString);
你可以检查dbContext.Database.Connection
的类型。如果它是EFProfiledDbConnection
你可以得到它的WrappedConnection
属性,它返回一个DbConnection
。如果您使用Sql Server,这是一个SqlConnection
。
您可以使用以下代码:
SqlConnection sqlConn=dbContext.Database.GetConnection<SqlConnection>()
以上是关于从DbConnection获取SqlConnection的主要内容,如果未能解决你的问题,请参考以下文章
Linux下ODBC连接HGDB报Could not SQLConnect错解决方法
Linux下ODBC连接HGDB报Could not SQLConnect错解决方法