【问题标题】:Trying to host a test site with Azure, but SQL Database won't transfer尝试使用 Azure 托管测试站点,但 SQL 数据库不会传输
【发布时间】:2017-01-07 00:33:24
【问题描述】:

我是一名新的 Web 开发人员,正在尝试使用 Azure 测试服务托管一个测试站点。

我可以在http://kencast20160830102548.azurewebsites.net/看到测试站点(您可以访问此站点进行测试)

但是,如果您转到服务 -> Fazzt --> 设备和应用程序页面,我会收到此错误:

错误。 处理您的请求时发生错误。 发展模式 切换到开发环境将显示有关所发生错误的更详细信息。

不应在已部署的应用程序中启用开发环境,因为它可能导致向最终用户显示异常的敏感信息。对于本地调试,可以通过将 ASPNETCORE_ENVIRONMENT 环境变量设置为Development,然后重新启动应用程序来启用开发环境。"

这些页面依赖于 SQL 数据库,所以我认为这就是问题所在。

我一直在尝试遵循此处发布的说明:https://docs.asp.net/en/latest/tutorials/publish-to-azure-webapp-using-vs.html

但是登录到我的 Microsoft Azure 帐户时,我找不到“配置 SQL 数据库”弹出框。

这些指示似乎与 Azure 中存在的内容不一致。

更新 - 2016 年 8 月 31 日

我研究并学到了更多: 我有一个带有两个 DBContext 的项目。

当我发布到 Azure 时,它​​会发布来自 ApplicationDBContext 的表,而不是来自 MyCompanyContext 的表。我可以使用 SQL Server 对象资源管理器进行验证。 我可以在 ApplicationDB 和 MyCompanyDB 的 appsettings.json 文件中看到我的本地连接字符串。以下是 appsettings.json 中的代码:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-MyCompany-3097a012-5e00-4c25-ad83-2730b4d73b4b;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Data": {
    "MyCompanyContext": {
      "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=MyCompanyContext-f9de2588-77e8-41dd-abb3-84341610b31a;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
  }

}

但是,当我查看“SQL Server 对象资源管理器”窗口时,我看到托管在 Azure 上的数据库 mycompanydb.database.windows.net(SQL Server 11.0.9231 -mycompanydb, MyCompany_db) 只有来自“DefaultConnection”数据库,而“MyCompanyContext”中没有任何内容。

如何将表从第二个数据库 (MYCompanyContext) 获取到 Azure?

我一直在研究这个Stack Overflow 响应,但它在 PMC 中使用了 Enable-Migration。当我这样做时,我得到一个错误,即 enable-migrations 已过时。

在本地,我总是使用以下方法进行迁移: add-migrations -c MyCompanyContext

您能给我的任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 如果您使用 EF 连接到 SQL,并且向导识别 DBContext 类的存在(至少我的 VS 2015 会发生这种情况),则会显示配置 sql。因此,为了让您的应用程序连接到 SQL Db,如果您将连接字符串存储在 appsettings.json 文件中,您可能正在读取我称之为 Startup.cs 的连接字符串。 docs.asp.net/en/latest/tutorials/first-mvc-app/…。然后将 Web 应用程序发布到 azure,如您发布的链接中所示
  • @JS_GodBlessAll 感谢您的回复,但我不明白。什么是EF?您的评论中包含的链接中提到了这一点。我也不明白我应该从这条评论中做什么:“所以为了让你的应用程序连接到 SQL Db,如果你将它存储在 appsettings 中,你可能正在读取我称之为 Startup.cs 的连接字符串。 json 文件。docs.asp.net/en/latest/tutorials/first-mvc-app/…” 这个链接似乎是关于在本地数据库上运行 SQL 数据库。我想在 Azure 上运行它。谢谢!
  • np, EF = 实体框架;要连接到 SQL Db,无论是在天蓝色还是本地 - 您必须适当地配置连接字符串。无论它在哪里显示本地,将其指向云上的 SQL 服务器。 Startup.cs 是您的 .net 核心应用程序的入口点。以下是一些有用的链接,可帮助您入门docs.asp.net/en/latest/data/index.htmlstackoverflow.com/questions/31097933/…
  • 您在什么时候偏离了教程? (另外:我不太确定这是否与 SQL Server 相关;这样的开发环境警告更适合 Web 应用程序框架,而不是 SQL Server。)
  • @drediske 我已经重复了两次教程,因为我正在处理现有项目,所以我跳过了有关创建 Web 应用程序的部分。在注册项目后,我也没有看到有关应用迁移的屏幕。我使用个人用户帐户登录。

标签: c# sql-server azure asp.net-core azure-sql-database


【解决方案1】:

从 cmets 来看,我猜你需要确保你的两个上下文都像这样应用在启动类中

  services.AddEntityFramework().AddSqlServer()
            .AddDbContext<MyCompanyContext>(options => options.UseSqlServer(Configuration.Get("Data:SQL")))
            .AddDbContext< ApplicationDBContext >(options => options.UseSqlServer(Configuration.Get("Data:SQL")));

以上假设有两件事: 1)您在appsettings.json中设置了这样的连接字符串

"Data": {
"SQL": "Server=tcp:yourDbServer.database.windows.net,1433;Initial Catalog=yourDb;Persist Security Info=False;User ID=youId;Password=YourPswd;MultipleActiveResultSets=True;TrustServerCertificate=False;Connection Timeout=30;",
}

2) 两个上下文共享相同的 Db,如果不是,则替换适当的连接字符串(确保它与您在 appsettings.json 中的方式相匹配)作为此示例的上下文:

.AddDbContext<MyCompanyContext>(options => options.UseSqlServer(Configuration.Get("Data:SQL2")));

【讨论】:

  • 这两个上下文看起来都应用在我本地计算机上的启动类中,并且连接字符串看起来像您建议的那样。我按照您对 appsettings.json 的建议添加了一个“SQL”行,但这并没有解决任何问题。我登录到 Azure 的 kudo 仪表板,它们在那里看起来也一样。我确实看到了一个名为“appsettingsProduction.json”的文档,看起来像这样:
  • 好的,我再次猜测是因为您返回新信息说有两个 appsettings.json 文件 - 如果是这样 - 然后执行以下操作:1) 检查 AzurePortal 什么是 ASPNET_ENVIRONMENT 看起来像含义 - 是设置为development 还是production。还要检查startup.cs 上的代码行,看看它是否有条件加载appsettings,意思是:.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, true); 如果有,请检查对应于两个DbContext 的连接字符串是否在其中?在本地调试以查看两者是否可用?最后 - 它在本地工作吗?
  • 我在 AzurePortal/Kudu 仪表板上找不到 ASPNET_ENVIRONMENT,但在我的本地计算机上,ASPNET_ENVIRONMENT 设置为“开发”。其他一切看起来都正确,并且连接字符串包含两个 DbContext。它肯定在本地工作,并且两个 DbContext 都在工作。
  • 所以如果 ASPNET_ENVIRONMENT 没有在 Azure 的门户网站 AppSettings 中设置,那么你怎么知道使用了哪个 appsettings.json 文件?你在这里看到了什么? myWebAppName.scm.azurewebsites.net/Env ;然后-->确保您确实拥有正确的连接字符串的步骤,登录到您的Azure门户-导航到Web应用程序刀片->AppSettings->然后在连接字符串下方将SQL作为键并放入您想要的连接字符串值,不要忘记点击顶部的保存,然后测试您的应用。
  • 这是否解决了问题?
猜你喜欢
  • 2014-03-02
  • 2022-11-28
  • 1970-01-01
  • 2017-09-17
  • 2023-03-09
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多