Это два конструктора в типе контекста вашей базы данных DB
:
public DB(DbContextOptions<DbContext> options) : base(options) { }
public DB() { }
Поэтому, когда контейнер внедрения зависимостей пытается разрешить контекст базы данных, он просматривает эти конструкторы и пытается определить, какиеконструктор для создания объекта.
Сначала он будет смотреть на объект, ожидающий аргумент DbContextOptions<DbContext>
.Обычно DbContextOptions
автоматически регистрируются как часть вызова AddDbContext<T>()
.Однако зарегистрированными типами являются DbContextOptions
(неуниверсальный) и DbContextOptions<T>
.
Так что в вашем случае для контекста базы данных DB
только типы DbContextOptions
и DbContextOptions<DB>
Таким образом, контейнер внедрения зависимостей не может разрешить DbContextOptions<DbContext>
и поэтому не может использовать этот конструктор.Таким образом, он будет использовать следующий конструктор, который оказывается пустым конструктором.Поскольку пустой конструктор не поддерживает какую-либо конфигурацию, контекст базы данных будет ненастроенным, и при попытке его использовать вы получите эту ошибку.
Решение довольно простое: отрегулируйте тип DbContextOptions<>
в этом конструкторе.Вы можете использовать DbContextOptions
или DbContextOptions<DB>
.Последнее, как правило, предпочтительнее, поскольку позволяет вам иметь несколько контекстов базы данных в одном приложении, но если у вас есть только один, то вы также можете просто использовать первый.Я также рекомендую вам удалить пустой конструктор, чтобы убедиться, что он не будет использоваться случайно:
public DB(DbContextOptions<DB> options)
: base(options)
{ }