使用关联的数据DLL将ASPNetCore应用程序发布到Azure。
Azure不会在发布向导上拾取任何数据库,而是会拾取DbContext和来自DbContext的连接字符串。
我已经在Startup.cs
和DbContext
中声明了连接字符串和DbProvider(SqlServer),并且还在服务应用程序中将其声明为环境变量。
发布向导看起来像this。
通过向导发布后,应用程序服务成功部署,但是API均遇到500个服务器错误。
构建输出包含几条消息,对我来说,这看起来像成功。
Generating Entity framework SQL Scripts...
Executing command: dotnet ef migrations script --idempotent --out "./path"
Generating Entity framework SQL Scripts completed successfully
adding database .. connstr
我是否需要为初始创建应用程序创建迁移?
我一直在EFCore中使用Code First范例方法,因此我在一些初始化器中有EnsureDeleted
和EnsureCreated
进行测试,但是在运行时不会调用它们。
我在EnsureCreated
中也有一个Startup.cs
。
if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Production")
{
services.AddDbContext<FFDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));
}
else
{
services.AddDbContext<FFDbContext>(options =>
options.UseSqlServer(local connections string));
}
// Automatically perform database migration
services.BuildServiceProvider().GetService<FFDbContext>().Database.Migrate();
var context = services.BuildServiceProvider()
.GetRequiredService<FFDbContext>();
context.Database.EnsureCreated();
我觉得如果我因尝试创建数据库而过度补偿,有什么主意吗?
System.Data.SqlClient.SqlException: at System.Data.SqlClient.SqlConnection.OnError (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.SqlInternalConnection.OnError (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.TdsParser.TryRun (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.SqlDataReader.get_MetaData (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.SqlCommand.FinishExecuteReader (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.SqlCommand.RunExecuteReader (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.SqlCommand.ExecuteReader (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (System.Data.SqlClient, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute (Microsoft.EntityFrameworkCore.Relational, Version=2.2.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
答案 0 :(得分:0)
您只需要在以下两个文件中更改您的DefaultConnection:
appsettings.json
和appsettings.Development.json
更改此
"ConnectionStrings": {
"DefaultConnection": "Server=(LocalDb)\\MSSQLLocalDB;Database=webapi;Trusted_Connection=True;MultipleActiveResultSets=true"
}
收件人
"ConnectionStrings": {
"DefaultConnection": "Server=.;Database=WebApiEfCore;Trusted_Connection=True;"
}
运行以下查询:
dotnet ef migrations add initial
dotnet ef database update
您也可以尝试使用Visual Studio,看看是否有帮助。