使用ServiceConfiguration(Azure)中的连接字符串自定义DbContext

时间:2014-10-10 11:56:55

标签: c# entity-framework azure

我正在使用具有Code First方法的实体框架,我有一个自定义DbContext。 我的connectionstring在ServiceConfiguration.Cloud.cscfg和ServiceConfiguration.Local.cscfg文件中定义。

 public CustomContext()
                : base("dbActivity")
 {
    ...

当上面的代码执行时,它会尝试从azure解决方案中检查我的web.config而不是ServiceConfiguration文件。

更新: 这是ServiceConfiguration文件中的connectionString:

<ConfigurationSettings>
  <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
  <Setting name="dbActivity" value="Server=tcp:xxx.database.windows.net,1433;Database=ra;User ID=user;Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" />
</ConfigurationSettings>

例外:

  

没有名为&#39; Server = tcp:xxx.database.windows.net,1433的连接字符串;数据库= ra;用户ID =用户;密码=密码; Trusted_Connection = False;加密= True;连接超时= 30 ;&#39;可以在应用程序配置文件中找到。&#34;

是否可以让它检查ServiceConfiguration.Local.cscfg?

4 个答案:

答案 0 :(得分:2)

最后我找到了解决方案。使用SqlConnectionStringBuilder类是必要的。

public RAActivityContext()
    : base((new SqlConnectionStringBuilder(
            CloudConfigurationManager.GetSetting("dbRAActivity")).ToString()))
{            

}

答案 1 :(得分:0)

有一个重载的构造函数,它接受一个实际的连接字符串。

这应该可以解决问题:

public CustomContext()
                : base(CloudConfigurationManager.GetSetting("dbActivity"))
{
    // stuff here
}

当然,该设置包含(完整)连接字符串。

答案 2 :(得分:0)

我不知道你可以直接从不同的配置加载它,但是有一个dbcontext的构造函数,它将连接字符串作为输入。

string connectionString = LoadFromConfig();
var context = new CustomContext(connectionString );

答案 3 :(得分:0)

我需要这样做,但是无法更改实际的DbContext构造函数,因为它在共享库中也是由使用app.config的项目使用的。我最终提出了另一种解决方案,即以编程方式修改worker角色本身内部的app.config连接字符串。

请参阅此方法:[{3}}

我使用的代码是

string databaseConnectionString = CloudConfigurationManager.GetSetting("dbActivity");
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConnectionStringsSection connectionStringsSection = (ConnectionStringsSection) config.GetSection("connectionStrings");
connectionStringsSection.ConnectionStrings["dbActivity"].ConnectionString = databaseConnectionString;
config.Save();
ConfigurationManager.RefreshSection("connectionStrings");

为此,你需要在app.config中有一个空的连接字符串,它将被覆盖

<connectionStrings>
    <add name="dbActivity" connectionString="" providerName="System.Data.SqlClient" />
</connectionStrings>