При выполнении миграции EF Core не удается найти переменную среды в VS Code - PullRequest
0 голосов
/ 09 мая 2020

Начато создание решения API с Azure функциями с версией времени выполнения 3.x и . NET Core 3.1 . В решении, использующем также Entity Framework Core 3.1 с первым подходом к коду.

Проверьте файл .csproj :

<PropertyGroup>
   <TargetFramework>netcoreapp3.1</TargetFramework>
   <AzureFunctionsVersion>v3</AzureFunctionsVersion>
   <RootNamespace>project_name</RootNamespace>
   <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest> 
</PropertyGroup>
<ItemGroup>
   <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
   <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.3" />
   <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.3">
     <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     <PrivateAssets>all</PrivateAssets>
   </PackageReference>
   <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.3" />
</ItemGroup>

В StartUp class У меня есть следующее для создания контекста базы данных:

public RequestContext CreateDbContext(string[] args)
{
   string sqlConnectionString = Environment.GetEnvironmentVariable("SqlConnectionString");
   var optionsBuilder = new DbContextOptionsBuilder<RequestContext>();
   optionsBuilder.UseSqlServer(sqlConnectionString);
   return new RequestContext(optionsBuilder.Options);
}

Итак, в проекте у меня есть модели для миграции, и я выполняю команду с . NET Core CLI как следующее:

dotnet-ef migrations add InitDb

При выполнении Azure Function локально проблем нет, он может прочитать значение строки подключения из local.settings. json файл без проблем. После запуска команды миграции я получаю следующую ошибку:

Значение не может быть нулевым. (Параметр 'connectionString')

Вопрос:

Итак, это ясно он не может найти переменную среды с именем SqlConnectionString после запуска команда миграции. Используя Visual Studio 2019 с Консоль диспетчера пакетов , есть способ решить эту проблему, настроив переменную среды в качестве следующей команды перед запуском миграции:

$env:SqlConnectionString="Server=<connection-string-value>"

Довольно неприятно переключаться между PM C и VS Code только из-за этого шага, если я хочу запустить миграции. Я проверял разные ответы в похожих темах, но ни один из них не помог мне так сильно.

Итак, есть ли способ сделать то же самое и настроить переменную среды с помощью VS Code терминала, используя bash ? Или какое может быть возможное решение для этого сценария?

Спасибо!

1 Ответ

0 голосов
/ 11 мая 2020

Проблема заключалась в том, что я изначально пытался создать переменную среды без ключевого слова export. Таким образом, с помощью следующей команды в bash dotnet migrations значение не может быть нулевым ошибка:

SqlConnectionString="Server=<connection-string-value>"

На основе комментария Jim Xu I создал переменную среды, которая, кажется, решает проблему как:

export SqlConnectionString="Server=<connection-string-value>"

См. полный журнал:

$ export SqlConnectionString="Server=<connection-string-value>"

$ echo $SqlConnectionString
Server=<connection-string-value>

$ dotnet-ef migrations add InitDb
Build started...
Build succeeded.

Done. To undo this action, use 'ef migrations remove'

Ссылки, которые помогли решить проблему:

  1. Переменная среды и переменная Shell, в чем разница? .
  2. Также вы можете найти дополнительную информацию в ссылке SO: Определение переменной с экспортом или без

Спасибо, что поделились ссылкой!

...