我终于想出了如何让 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 连接字符串?
如果可以的话,我会尽量避免手动交换连接字符串。