Azure 未在发布 EFCore 2 应用程序时创建数据库架构
Azure is not creating database schema on publish of EFCore 2 application
正在将 ASPNetCore 应用发布到 Azure,以及关联的数据 DLL。
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
用于测试,但这些不会在运行时调用。
我在 Startup.cs
中也有一个 EnsureCreated
。
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();
我觉得如果我在尝试创建数据库时过度补偿,有什么想法吗?
编辑 - SQL 来自 Azure Insights 的错误
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,看看是否有帮助。
正在将 ASPNetCore 应用发布到 Azure,以及关联的数据 DLL。
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
用于测试,但这些不会在运行时调用。
我在 Startup.cs
中也有一个 EnsureCreated
。
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();
我觉得如果我在尝试创建数据库时过度补偿,有什么想法吗?
编辑 - SQL 来自 Azure Insights 的错误
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,看看是否有帮助。