Azure 未在发布 EFCore 2 应用程序时创建数据库架构

Azure is not creating database schema on publish of EFCore 2 application

正在将 ASPNetCore 应用发布到 Azure,以及关联的数据 DLL。

Azure 没有在发布向导上选取任何数据库,而是在选取 DbContext 和来自 DbContext 的连接字符串。

我已经在 Startup.csDbContext 中声明了连接字符串和 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 范式方法,所以我在一些初始化程序中有 EnsureDeletedEnsureCreated 用于测试,但这些不会在运行时调用。

我在 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.jsonappsettings.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,看看是否有帮助。