Azure не создает схему базы данных при публикации приложения EFCore 2 - PullRequest
0 голосов
/ 28 апреля 2019

Публикация приложения ASPNetCore в Azure со связанной DLL данных.

Azure не собирает базы данных в мастере публикации, но выбирает DbContext и строку подключения из DbContext.

Я объявил строку подключения и DbProvider (SqlServer)в Startup.cs и DbContext он также объявлен как переменная среды в приложении-службе.

Мастер публикации выглядит так: 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

Нужно ли создавать миграции для первоначального создания приложения?

Я использовал метод парадигмы Code First в EFCore, и поэтому я имею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();

Я чувствую, что если я что-то компенсирую за попытку создания БД, есть какие-нибудь идеи?

Правка - Ошибка 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)

1 Ответ

0 голосов
/ 29 апреля 2019

Вам просто нужно изменить 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 и посмотреть, поможет ли это.

...