DbContext развязка - PullRequest
       6

DbContext развязка

0 голосов
/ 22 мая 2018

Я уже положил свой связанный с EF код в библиотеку классов и использовал его в проекте asp.net webapi.Однако у меня все еще есть следующий код в моем проекте webapi.

services.AddDbContext<MyOwnDbContext>(
    ops => ops.UseSqlite(connection, optionsBuilder => optionsBuilder.MigrationsAssembly("MyProject.API")));

Есть ли способ полностью отделить класс 'MyOwnDbContext: DbContext' от проекта webapi (используя фабрику или интерфейс).Или это ненужная проблема?Я просто не хочу использовать библиотеку, связанную с EF, в двух проектах.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Это ненужная проблема.Вы помещаете это в корень своего приложения (Startup.cs).Здесь все запрограммировано (контейнер для инъекций зависимостей, контексты, ведение журнала, ...).

На самом деле лучшего места для этого нет.Потому что конфигурация самого контекста не имеет значения для любого уровня ниже уровня приложения.Ваши DAL / Repositories просто используют уже настроенный контекст и все.

0 голосов
/ 22 мая 2018

Я бы оставил это в покое, так как вам все еще нужно установить Entity Framework в проекте ввода, чтобы библиотека могла его использовать (или взломать путь путем копирования файлов вручную, но давайте не будем вдаваться в подробности).

Однако это то, что я сделал в недавнем проекте, где я хотел хранить все свои сервисы в одном месте, отличном от класса запуска:

  1. Установить Microsoft.Extensions.DependencyInjection в проектгде вы хотите свой DbContext.
  2. Добавьте что-то вроде этого:

    public static class Injector
    {
        // you probably want to pass the connection string or an Options class here too
        public static IServiceCollection Inject(this IServiceCollection services)
        {
            services.AddDbContext<...>(...);
    
            return services;
        }
    }
    
  3. Вставьте его, а не сам контекст:

    public void Configure(IServiceCollection services)
    {
        services.Inject();
    
        // and whatever else you need 
        services.AddMvc();
    }
    

Таким образом, вы мало выигрываете, но можете продолжать, как я уже говорил в начале.

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