Подключение к Entity Framework Core in. NET 3.1 Azure Функция Project Startup.cs - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь использовать платформу сущностей для базы данных в Azure. У меня есть строка подключения, хранящаяся в local.settings. json, но все мои попытки ссылаться на нее из файла Startup.cs не увенчались успехом.

Я могу получить доступ к строке подключения с помощью IConfiguration DI в класс функций, и я могу успешно получить доступ к базе данных с помощью SQL Command, используя конфигурацию, такую ​​как:

string connectionString = _configuration.GetConnectionString("cpni");

Так что я знаю, что строка подключения работает и что я могу получить к ней доступ.

Если я попытаюсь использовать DI с IConfiguration на классе запуска , компилятор не выдаст мне никаких ошибок, но после запуска в режиме отладки я получу следующую ошибку:

System.Private.CoreLib: не определен конструктор без параметров для типа 'CPNI_Functions.Startup'.

Вот то, что я в настоящее время успешно использую с жестко закодированным connectionString (так как использование DI с IConfiguration не работает):

builder.Services.AddDbContext<CpniContext>(
    options => options.UseSqlServer(connectionString));

И это позволяет мне работать с базой данных через EF. Я хотел бы использовать некоторую комбинацию этого и что-то вроде этого:

builder.Services.AddDbContext<CpniContext>(/*options need to go here?*/)
    .Configure<IConfiguration>((configuration) =>
    {
        //Or are options supposed to go here somewhere, or be bound here with some sort of .Bind()?
        configuration.GetConnectionString("cpni");
    });

Если это не имеет смысла или не сработает, то, пожалуйста, дайте мне знать, каков рекомендуемый способ установки этого Я вверх есть. Если возможно, я хочу избежать использования поиска конфигурации через ConfigurationManager.

Для справки, вот полный файл Startup.cs, и это работает:

using CPNI_Functions.Data;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(CPNI_Functions.Startup))]

namespace CPNI_Functions
{
    class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            string connectionString = "myconnectionstringhere";

            builder.Services.AddDbContext<CpniContext>(
                options => options.UseSqlServer(connectionString));
        }
        /*
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<CpniContext>(configuration.GetConnectionString("cpni"));
        }*/
    }
}

Я новичок в ядре и я Я новичок в Azure Функции, поэтому, пожалуйста, прости мое невежество по этому поводу. Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 08 апреля 2020

Для приложения-функции Azure вы можете попробовать добавить пакет NuGet:

System.Configuration.ConfigurationManager

local.settings. json:

{
  "ConnectionStrings": {
    "cpni": "[ConnectionStringDetails]"
  }
}

Тогда, надеюсь, вы сможете получить доступ с помощью ConfigurationManager.

services.AddDbContext<CpniContext>(
    options => options.UseSqlServer(ConfigurationManager.ConnectionStrings["cpni"].ConnectionString));
...