是否可以从Azure角色环境中读取EF代码第一个连接字符串

时间:2013-05-01 22:32:59

标签: entity-framework azure code-first azure-worker-roles

我有一个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:/

是否有任何关于如何实现这一目标的想法或指导?

提前感谢您抽出时间来研究这个问题。

1 个答案:

答案 0 :(得分:2)

我建议您在上下文中创建一个ContextFactory类或静态Factory方法,如此

public class BaseContext : DbContext
{
    public BaseContext(string connectionString)
        : base(connectionString)
    {
    }

    public static BaseContext Create()
    {
        return new BaseContext(
            RoleEnvironment.GetConfigurationSettingValue("connectionString"));
    }
}