Глобальная строка подключения в .net Core WebApi - PullRequest
0 голосов
/ 23 октября 2018

Я использую ядро ​​.net 2.0, и моя структура в основном такова: у меня есть 20 проект Web Api и проект одной библиотеки классов (DbContext) .Проекты Web Api имеют Startup.cs.Но у библиотеки классов нет Startup.cs.Где я должен написать строку подключения?Потому что в библиотеке классов нет app.config или Startup.cs.Если я пишу в Startup.cs API, то мне нужно написать connectionString 20 раз.Это не приемлемо.Я написал, используя DbContextOptions, как показано ниже, но я не уверен, что это лучший способ.Каков наилучший способ для этого?

public class MyDbContext : DbContext
{
    private readonly IAuditHelper auditHelper;

    public MyDbContext(DbContextOptions<MyDbContext> options, IAuditHelper auditHelper)
        : base(GetOptions())
    {
        this.auditHelper = auditHelper;
    }

    private static DbContextOptions GetOptions()
    {
        return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), "server=asdf; database=asdf; user id=asdf; password=asdf").Options;
    }

    public async Task<int> SaveChangesWithoutAuditAsync(CancellationToken cancellationToken = default(CancellationToken))
    {
        return (await base.SaveChangesAsync(true, cancellationToken));
    }
}

1 Ответ

0 голосов
/ 23 октября 2018

Вы бы создали файл appsettings.json, в котором было бы объявлено одно или несколько соединений.

{
     "ConnectionStrings": {
          dbExampleSystemConnection: "...",
          dbSampleSystemConnection: "..."
     }
}

После того, как вы определили свое соединение в appsettings.json, вам нужно будет создать конфигурацию итакже настройте Entity Framework внутри коллекции сервисов для построения вашего провайдера услуг.Чтобы добавить appsettings.json, вам нужно сделать следующее:

public static IConfiguration BuildConfigurationProvider() => new ConfigurationBuilder()
     .SetBasePath(Directory.GetCurrentDirectory())
     .AddJsonFile("appsettings.json", false, true)
     .Build();

Затем вам нужно создать вашу Service Collection, я немного расширил свою, но по сути вам нужно следующее:

public class ApplicationProvider
{
     public ApplicationProvider() => Configuration = ApplicationConfigurationProvider.BuildConfigurationProvider();

     public void StartApplication()
     {
          var serviceCollection = new ServiceCollection().AddSingleton(configuration => Configuration);
          var serviceProvider = ApplicationServiceProvider.BuildServiceProvider(serviceCollection);

          ...
     }
}

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

 services.AddDbContext<BloggingContext>(options => options.UseSqlite(Configuration.GetConnectionString("dbSampleSystemConnection"));

В моем консольном приложении я создал ряд провайдеров, но вы должны иметь большую часть этого определения вваш проект Web Api уже.Мое консольное приложение использует контейнер DI по умолчанию для Core.

...