31

我有一个扩展方法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。

还有其他想法吗?提前致谢!

4

8 回答 8

20

好吧,如果两者都可以共享相同的Connection String内容,那么我想它们都是SqlConnection.

试试这个:

var connection = rep.Database.Connection as SqlConnection;
于 2013-06-03T20:21:25.633 回答
7

解决此问题的一种可能方法是添加Persist Security Info=true到您的连接字符串。

于 2013-06-03T20:20:33.643 回答
3

到目前为止,我发现的唯一方法是使用 System.Configuration 库:

var sqlConnString = ConfigurationManager.ConnectionStrings["your_conn_string_name"].ConnectionString;
var bulkCopy = new SqlBulkCopy(sqlConnString);
于 2013-12-17T20:59:09.837 回答
3

我对 ProfiledConnection (HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledConnection) 有类似的问题

我需要的是SqlConnection,这成功了:

ProfiledConnection profiledConnection = dbContext.Database.Connection as ProfiledConnection;
SqlConnection sqlConnection = (SqlConnection)profiledConnection.Inner;
于 2015-12-04T15:23:22.453 回答
1

您可以检查dbContext.Database.Connection. 如果它是一个EFProfiledDbConnection,你可以得到它的WrappedConnection属性,它返回一个DbConnectionSqlConnection如果您使用 SQL Server,那就是这样。

于 2013-06-03T22:08:33.537 回答
0

如果您使用的是较新的 .NET Core:

new SqlConnection(kontext.Database.GetConnectionString())
于 2021-03-24T20:13:36.967 回答
-2

你可以使用这个:

SqlConnection sqlConn = dbContext.Database.GetConnection<SqlConnection>()
于 2018-10-21T11:20:45.440 回答
-2

您可以使用:

(SqlConnection)context.Database.GetDbConnection()

这将创建包含传递的 SQL 连接对象的副本。

于 2020-11-25T14:03:16.880 回答