EF 6拦截器设置连接字符串

时间:2015-06-08 14:06:49

标签: entity-framework ef-code-first entity-framework-6

如何使用EF6拦截器动态设置db上下文的连接字符串?我使用代码优先使用数据库。

基本上在我的应用程序中我有这种情况:

在我的app.config文件中,我定义了3个数据库连接字符串:

  <connectionStrings>
    <add name="Db1DbContext" connectionString="Data Source=***;Initial Catalog=***;Integrated Security=false;User Id=***;Password=***" providerName="System.Data.SqlClient"/>
    <add name="Db2DbContext" connectionString="Data Source=***;Initial Catalog=***;Integrated Security=false;User Id=***;Password=***" providerName="System.Data.SqlClient"/>
    <add name="Db3DbContext" connectionString="Data Source=***;Initial Catalog=***;Integrated Security=false;User Id=***;Password=***" providerName="System.Data.SqlClient"/>
  </connectionStrings>

3个数据库具有相同的结构。基于用户在应用程序启动时输入的密钥,我需要使用3个数据库中的一个,因此我需要从配置文件中动态读取正确的连接字符串并将其设置为db上下文,以便我将使用正确的数据库中。

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是将用户输入的密钥放在某个全局变量中(或稍后可以访问它的某个地方),然后调用一个方法来使用正确的连接字符串来实例化DbContext。像这样:

public MyDbContext CreateContext()
{
    if (user_entered_key == "one")
    {
        return new MyDbContext("Db1DbContext");
    }
    else if (user_entered_key == "two")
    {
        return new MyDbContext("Db2DbContext");
    }
    else
    {
        return new MyDbContext("Db3DbContext");
    }
}