1

我有一个 Azure Worker Role,它使用 Entity Framework Code First (5.0) 与 SQL Azure 数据库通信。目前我在工作角色的 app.config 中有连接字符串,但是我想将连接字符串移动到工作人员角色的角色环境设置中,以便让我的实时服务同事更轻松地更改连接字符串,而无需重新部署 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 属性,但没有设置器:/。

有没有人对如何实现这一目标有任何想法或指导?

提前感谢您花时间查看这个问题。

4

1 回答 1

2

我建议在您的上下文中创建一个 ContextFactory 类或静态工厂方法,如下所示

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

    public static BaseContext Create()
    {
        return new BaseContext(
            RoleEnvironment.GetConfigurationSettingValue("connectionString"));
    }
}
于 2013-05-02T01:35:40.187 回答