Передать строку подключения в библиотеку. Net Core EF из другой библиотеки. - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть ASP. NET Базовое приложение, которое структурировано в три уровня, а именно:

  • Уровень доступа к данным (Entity Framework)
  • Бизнес-логика c layer
  • ASP. NET MVC веб-приложение

Как сейчас, конфигурация работает, и я могу получить доступ к своей базе данных в библиотеке своего веб-приложения , Однако, когда я сначала построил свой уровень доступа к данным с помощью EF Db, я получил обобщенный класс c, который выглядит примерно так:

public partial class ClassContext: DbContext
{
    public ClassContext(DbContextOptions<ClassContext> options)
        : base(options)
    {
    }

    public virtual DbSet<Entity> Entity{ get; set; }
    ....

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer("ConnString");
        }
    }
}

Как вы можете видеть, строка подключения жестко закодирована в моем OnConfiguring метод, который не рекомендуется.

Поэтому я следовал следующему «руководству» здесь , которое предлагает мне использовать встроенный DI, чтобы передать строку подключения от моего Веб-библиотека.

Это я сделал:

public void ConfigureServices(IServiceCollection services)
{
    //Add connectionstring to EF
    services.AddDbContext<ClassContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ConnectionStringFromAppSettings")));
}

Согласно "руководству", строка соединения должна быть предоставлена ​​конструктору моего ClassContext класса - и это вроде как, но не с любым Строка подключения ..

Это означает, что optionsBuilder.IsConfigured оценивает false и хочет использовать жестко закодированную строку подключения.

Поэтому я очень хотел бы знать, если я использую DI неправильно, так как я не могу получить доступ к строке подключения в моем ClassContext классе

Обновлении

Я удалил метод OnConfiguring() и теперь внедряю контекст в конструктор моего класса обслуживания в слое бизнес-логики c следующим образом:

public MasterService(ClassContext context)
{
    MinorService = new MinorService(context);
}

public Stuff AddStuffIntoDatabase(Stuff test)
{
    //business logic going before here
   MinorService.addstuffMethod(test) 
}

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

Для этого DbContext не настроен поставщик базы данных. Поставщик может быть настроен путем переопределения метода DbContext.OnConfiguring или использования AddDbContext в поставщике службы приложений.

Этого не происходило раньше, когда я неправильно настроил строку подключения в своем методе OnConfiguring().

1 Ответ

0 голосов
/ 20 февраля 2020

А как насчет appsettings. json? Это так?

"ConnectionStrings": {
    "ConnectionStringFromAppSettings": "your_connection_string"
  }

Configuration.GetConnectionString всегда искать в разделе «ConnectionStrings»

https://docs.microsoft.com/it-it/dotnet/api/microsoft.extensions.configuration.configurationextensions.getconnectionstring?view=dotnet-plat-ext-3.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...