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

时间:2019-04-28 11:20:01

标签: c# entity-framework azure entity-framework-core ef-core-2.0

使用关联的数据DLL将ASPNetCore应用程序发布到Azure。

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进行测试,但是在运行时不会调用它们。

我在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();

我觉得如果我因尝试创建数据库而过度补偿,有什么主意吗?

编辑-Azure Insights中的SQL错误

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)

1 个答案:

答案 0 :(得分:0)

您只需要在以下两个文件中更改您的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,看看是否有帮助。