Строки соединения Josn - IConfiguration .net core - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь получить доступ к соединению, хранящемуся в приложении.Мое решение имеет два проекта, с одной стороны, проект базы данных (DAL), а с другой стороны, веб-API.

На веб-интерфейсе API у меня есть App.settings со строкой соединения для двух сред.

Я пытаюсь настроить DBContext для получения оттуда строки подключения.

Что я делаю не так?Я оставляю код большое спасибо!

DAL PROJECT:

DBContext:

using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using DAL.Models.ProcedureModels;
using DAL;
using Microsoft.Extensions.Configuration;

..........

       public DBContext()
        {
        }

        public DBContext(DbContextOptions<DBContext> options)
            : base(options)
        {
        }

.........
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                IConfiguration configuration;
                optionsBuilder.UseSqlServer(configuration.GetConnectionString("local"));
            }
        }

JSON FILE IN WEB API Project:

{
  "ConectionStrings": {
    "local": "............",
    "staging": "..........",
    "staging_ashure": "",
    "production": ""
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Ответы [ 2 ]

1 голос
/ 04 мая 2019
IConfiguration configuration;
optionsBuilder.UseSqlServer(configuration.GetConnectionString("local"));

Это объявляет переменную configuration, которая не инициализирована и поэтому не содержит значения, а затем немедленно пытается использовать ее.Это не будет работать.Сначала вам нужно будет инициализировать переменную configuration.

Но это не поможет вам, поскольку вам нужно получить конфигурацию из веб-приложения здесь.

Вместо использования OnConfiguring, я бы предложил вам просто использовать конструктор с DbContextOptions, а затем положиться на приложение для правильной регистрации контекста базы данных из вашей библиотеки.

То есть внутри ConfigureServices вашего веб-приложенияStartup, добавьте это:

services.AddDbContext<DBContext>(options =>
{
    options.UseSqlServer(configuration.GetConnectionString("local"));
});

Там DBContext будет типом из вашего DAL проекта.

0 голосов
/ 06 мая 2019

Если вы настаиваете на доступе к строке соединения в DBContext, вы можете попытаться разрешить IConfiguration из Service Collection.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    private readonly IConfiguration _configuration;
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options,
        IConfiguration configuration)
        : base(options)
    {
        _configuration = configuration;
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            var connectionString = _configuration.GetConnectionString("local");
            optionsBuilder.UseSqlServer(_configuration.GetConnectionString("local"));
        }
    }
}
...