Что такое "DbContextOptions`1"? - PullRequest
2 голосов
/ 13 января 2020

У меня есть Web API в ASP. NET Core . Когда я добавляю контекст БД в Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<FixturesContext>(
            options => options.UseSqlServer(Configuration.GetConnectionString("FixturesDatabase")));
    services.AddControllers();
}

Я вижу, что количество сервисов в контейнере «services» увеличивается на три, я думаю, что это:

  • FixturesContext
  • DbContextOptions
  • DbContextOptions`1

Мне интересно, что такое "DbContextOptions1"? Кто-нибудь знает? Я попытался погуглить это, но не удовлетворяющий результат. Моя цель - заменить исходный контекст в памяти (для запуска интеграционных тестов без исходной базы данных), поэтому я удаляю контекст БД и его параметры и добавляю контекст в памяти вместо них.

Ответы [ 2 ]

3 голосов
/ 13 января 2020

DbContextOptions'1 будет общим c DbContextOptions<FixturesContext>, зарегистрированным для внедрения в контекст при инициализации.

Ссылка Настройка DbContextOptions

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

    //...
}
3 голосов
/ 13 января 2020

Третий сервис, который вы получаете, является обобщенной c версией DbContextOptions. При вызове .ToString() для обобщенного c типа это часто выглядит следующим образом.

Причина в трех случаях заключается в том, что EF добавляет общий объект DbContextOptions и более конкретный c объект для вашего определенного context.

Если вы проверяете вызовы третьей службы, вы должны найти тип вашего DbContext в качестве универсального c параметра.

...