实体框架:DbContext并设置ProviderName

NoP*_*God 30 entity-framework

当您从DbContext派生并使用无参数构造函数时,它将从web.config加载连接字符串.您还可以选择使用其他DbContext构造函数之一显式指定connectionString.

我的特殊情况表明不能在web.config中指定连接字符串,因为服务器/用户名和密码的位置是在运行时确定的.轻松修复吧?只需使用上面提到的构造函数来指定连接字符串?错误.

问题是,当您使用所述构造函数指定连接字符串时,它仍会尝试使用默认提供程序,因此如果您使用一个或多个非标准提供程序,就像我一样,它将无法工作.

我确定我可以在web.config中更改默认提供程序,但我想使用多个提供程序,所以这不会.

我能看到的唯一可能的方法是使用ObjectContext而不是DbContext,这似乎允许您指定提供程序以及数据库连接字符串.

还有其他办法吗?我的解决方法是否合理?

我相信我也可以从ObjectContext实例创建一个DbContext.

hai*_*770 36

DbConnection手动创建并将其传递给DbContext构造函数,如下所示:

var conn = DbProviderFactories.GetFactory("MY_CONN_PROVIDER").CreateConnection();
conn.ConnectionString = "MY_CONN_STR";

new DbContext(conn, true);
Run Code Online (Sandbox Code Playgroud)

注意第二个参数bool contextOwnsConnectiontrue.由于您不在其他地方重新使用该连接,因此它允许上下文Dispose()在需要时管理连接.