【发布时间】:2021-01-10 18:51:34
【问题描述】:
我们最近从dev 的本地服务器和prod 的云上私有服务器迁移到 Azure,我们有不同的插槽 (dev/staging/prod) 和 SQL Azure也是。
在我需要创建新的迁移之前,一切都运行良好。我们使用的是 Code First EF6,因此,为了创建迁移,我在控制台包管理员窗口中键入 add-migration Whatever099BriefDescription 命令。
我立即得到一个NullReferenceException 指的是连接字符串。我们有一个 ConnectionStringFactory 类,我们曾经有一个 #if DEBUG# 返回从 Web.Config 抓取的正确连接字符串。
public static class ConnectionStringFactory
{
public static string GetConnectionString()
{
//USED JUST FOR CREATING MIGRATIONS
//#if DEBUG
// return @"Data Source = SQLSERVER\LANSERVER; Initial Catalog = Project; user id = Project; password = asdf; MultipleActiveResultSets = true";
//#endif
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Project"].ConnectionString;
return connectionString;
}
}
由于我们实际使用的是 Azure 的配置连接字符串(在 Azure 门户面板上),我们的 web.config 没有定义连接字符串。所以当然NullReferenceException 是完全有道理的,因为它试图从一个无法抓取的地方获取该字符串。
我终于可以再次使用 #if DEBUG# 注释创建迁移,提供硬编码的连接字符串,当然之后删除它。
这似乎是一种“奇怪”的行为,或者至少不是最佳行为。您能否分享有关如何创建 EF 迁移而不需要临时硬编码连接字符串的任何建议,以便可以“以某种方式”实现从 Azure 获取它?
【问题讨论】:
标签: c# asp.net-mvc azure entity-framework azure-sql-database