我正在使用具有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?
答案 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>