将ASPNetCore应用程序发布到Azure,并附带关联的数据DLL。
Azure没有在发布向导上获取任何数据库,而是从DbContext获取DbContext和连接字符串。
我在Startup.cs
和DbContext
中声明了连接字符串和DbProvider(SqlServer),它也被声明为服务应用程序中的环境变量。
发布向导看起来像this。
通过向导发布后,app服务成功部署,但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)
您只需要在以下两个文件中更改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,看看它是否有帮助。