尝试使用Azure托管测试站点,但SQL数据库不会传输

时间:2016-08-30 16:05:52

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

我是一名新的网络开发人员,正在尝试使用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日

我已经研究和学习了一点: 我有一个带有两个DBContexts的项目。

当我发布到Azure时,它从ApplicationDBContext发布表,但不发布MyCompanyContext中的表。我可以使用SQL Server对象资源管理器验证。 我可以在appsettings.json文件中看到ApplicationDB和MyCompanyDB的本地连接字符串。以下是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。当我这样做时,我得到一个错误,启用 - 迁移已经过时。

在本地,我总是用这个进行迁移: add-migrations -c MyCompanyContext

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

谢谢!

1 个答案:

答案 0 :(得分:1)

From the comments, I am guessing you need to ensure both your contexts are applied in the startup class like this

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

the above assumes two things: 1) you have the connection string set up like this in your 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) Both the contexts share the same Db, if not then substitute the appropriate connection string (make sure to have it matched to the way you have it in your appsettings.json) for the context like this sample:

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