Я бился головой об стену этим и гуглил безрезультатно.
Я только что начал новый проект ASP.NET Core MVC, я установил / обновил свои пакеты для этих двух до 2.2.0:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
Я также настроил проект на .NET Core 2.2.0.
Я могу успешно добавить свои схемы таблиц с помощью этой команды в консоли диспетчера пакетов для создания базы данных, поэтому я знаю, что строка подключения в порядке / работает:
Scaffold-DbContext "SERVER=Server\Instance;DATABASE=Database;UID=user;PWD=password;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables Table1, Table2, Table3
Файл созданной модели, DatabaseDBContext.cs
выглядит так:
public partial class DatabaseDBContext : DbContext
{
public DatabaseDBContext()
{
}
public DatabaseDBContext(DbContextOptions<DatabaseDBContext> options)
: base(options)
{
}
}
Это также содержит метод, который работает для извлечения моих данных скаффолдов, но не считается безопасным для производственного использования, поэтому я прокомментировал это:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("SERVER=Server\\Instance;DATABASE=Database;UID=user;PWD=password;");
}
}
Я добавил эту же строку подключения в файл appsettings.json
:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
"DBConnString": "SERVER=Server\\Instance;DATABASE=Database;UID=user;PWD=password;"
}
}
Затем я добавил DbContext
в файл startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddDbContext<DatabaseDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DBConnString")));
}
Попытка добавить новый scaffolded контроллер для одной из таблиц выдает эту ошибку:
Нахождение генератора 'контроллера' ...
Запуск генератора «контроллера» ...
Попытка скомпилировать приложение в памяти.
Попытка выяснить метаданные EntityFramework для модели и DbContext: 'TableName'
Для этого DbContext не настроен поставщик базы данных. Поставщик может быть настроен путем переопределения метода DbContext.OnConfiguring или с помощью AddDbContext в поставщике службы приложений. Если используется AddDbContext, то также убедитесь, что ваш тип DbContext принимает объект DbContextOptions в своем конструкторе и передает его базовому конструктору для DbContext.
StackTrace:
в Microsoft.EntityFrameworkCore.Internal.DbContextServices.Initialize (ISopviceProvider scopedProvider, IDbContextOptions contextOptions, контекст DbContext)
в Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider ()
в Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService [TService] (IInfrastructure 1 accessor)<br>
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func
1 factory)
Для этого DbContext не настроен поставщик базы данных. Поставщик может быть настроен путем переопределения метода DbContext.OnConfiguring или с помощью AddDbContext в поставщике службы приложений. Если используется AddDbContext, то также убедитесь, что ваш тип DbContext принимает объект DbContextOptions в своем конструкторе и передает его базовому конструктору для DbContext.
Кто-нибудь понял, что я здесь не так делаю?