1

我终于想出了如何让 web.config 转换工作,以便在本地我有一个连接(我的默认 web.config 中的那个),然后当我发布到 Azure 时,应用“调试”转换,以便 Azure - 使用 SQL 数据库连接字符串。

这么多工作,但现在我遇到了数据库迁移的问题。

在我的配置中:

protected override void Seed(MG.Context.MentorContext context)
    {
        System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<MentorContext, Configuration>());

        if (!WebSecurity.Initialized)
            WebSecurity.InitializeDatabaseConnection("DefaultConnection",
                 "User", "UserId", "Username", autoCreateTables: true);
    }

现在,当我在本地运行并想要更新我的本地数据库时,我打开包管理器控制台并输入“update-database”,一切正常。

有时我想更新远程 Azure-SQL 数据库 - 所以过去我已经这样做了:

Update-Database -ConnectionString "azure connection string here" -verbose

当我手动更新我的本地 web.config 时,它正在工作。既然我正在使用上述转换,即使我指定了一个 connectionString,我的 Seed 方法中的 DefaultConnection 也会解析为未转换的连接字符串(我的本地数据库),因此成员资格表永远不会在 Azure 数据库上创建。

这可以通过手动更新默认 web.config 来解决,但这违背了使用这些转换的目的。

如何应用这些转换,以便我的 EF 迁移的 Seed 方法使用 Azure 连接字符串- 或者 - 我如何告诉 update-database 使用 azure 连接字符串?

如果可以的话,我会尽量避免手动交换连接字符串。

4

1 回答 1

0

您提到了 Web.config 并“发布”到 Azure;您在使用 Azure 网站吗?

如果是这样,请看这篇文章。简而言之,如果您在 Azure 网站的 K/V 存储上配置了与您的连接字符串同名的连接字符串,那么您在 Azure 上设置的值将自动优先:

连接字符串以类似的方式工作,但有一点额外的要求。请记住,之前有一个名为“example-config_db”的连接字符串与网站相关联。如果网站的 web.config 文件在配置部分引用相同的连接字符串,则 Windows Azure 网站将在运行时使用门户中显示的值自动更新连接字符串。

这应该确保您Seed的方法尝试连接到正确的数据库。

于 2013-10-18T16:28:28.580 回答