我有一个Azure Worker Role,它使用Entity Framework Code First(5.0)与SQL Azure数据库通信。目前我在worker角色的app.config中有连接字符串但是我想将连接字符串移动到Woker Role的角色环境设置中,以便为我的实时服务同事更轻松地更改连接字符串,而无需重新部署Azure封装
目前我正在以下列形式初始化上下文:
protected BaseContext()
: base("name=DataStore")
{
try
{
((IObjectContextAdapter)this).ObjectContext.Connection.Open();
var storeConnection = (SqlConnection)currentDbConn;
new SqlCommand("declare @i int", storeConnection).ExecuteNonQuery();
}
catch (Exception ex)
{
currentDbConn.Close();
Trace.TraceError("Error occured while getting connection to context", ex.Message);
throw;
}
}
我无法覆盖DbContext(string nameOrConnectionString)以便能够从RoleEnvironment中提取连接字符串,我还尝试创建一个新的SqlConnection并分配Database.Connection属性,但是没有setter:/
是否有任何关于如何实现这一目标的想法或指导?
提前感谢您抽出时间来研究这个问题。
答案 0 :(得分:2)
我建议您在上下文中创建一个ContextFactory类或静态Factory方法,如此
public class BaseContext : DbContext
{
public BaseContext(string connectionString)
: base(connectionString)
{
}
public static BaseContext Create()
{
return new BaseContext(
RoleEnvironment.GetConfigurationSettingValue("connectionString"));
}
}