Tenho um projeto Asp.Net onde tento migrar um Banco de Dados com um DbContext. Infelizmente, recebo o erro
Não foi possível criar um 'DbContext' do tipo ''. A exceção 'Não é possível resolver o serviço para o tipo 'Microsoft.EntityFrameworkCore.DbContextOptions`1[Bulky.DataAccess.Data.ApplicationDbContext]' ao tentar ativar 'Bulky.DataAccess.Data.ApplicationDbContext'.' foi lançado ao tentar criar uma instância.
quando tento migrar o banco de dados com o
migrações dotnet ef adicionam AddCategoryToDbAndSeedTable
comando
Você pode me explicar por que não está funcionando? Anexei todo o projeto com um link do Google Drive
Link do projeto: https://drive.google.com/file/d/1hEIv9BeocKmFZRyELYeUZTTtyrIaZbF9/view?usp=sharing
Editar: E aqui estão os registros detalhados: https://drive.google.com/file/d/1jPweHJc0YsI-Kg_5W6D5cfFQd3n6X8XU/view?usp=sharing
Aqui está o código relevante:
Programa.cs:
using Bulky.DataAccess.Data;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
ApplicationDbContext.cs:
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
public DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>().HasData(
new Category { Id = 1, Name = "Action", DisplayOrder = 1 },
new Category { Id = 2, Name = "SciFi", DisplayOrder = 2 },
new Category { Id = 3, Name = "History", DisplayOrder = 3 }
);
}
Você precisa especificar a
--project
(o projeto ao qual a nova migração EF deve ser adicionada) e--startup-project
(o projeto que contém as configurações do banco de dados) para executar a migração. Sem essas configurações, oBulky.DataAccess
projeto não possui a string de conexão do banco de dados eApplicationDbContext
não pode ser construído sem a configuração de injeção de dependência doBulkyWeb3
projeto.Na mesma pasta que BuklyWeb3.sln , você pode executar este comando:
dotnet ef migrations add AddInitialMigration --startup-project BulkyWeb3 --project Bulky.DataAccess
Ou, na mesma pasta que Bulky.DataAccess.csproj, você pode executar este comando:
dotnet ef migrations add AddInitialMigration --startup-project ..\BulkyWeb3
Esses comandos criarão uma nova migração EF na nova
/BulkyWeb3/Bulky.DataAccess/Migrations
pasta.O que você precisa é de um
IDesignTimeDbContextFactory<ApplicationDbContext>
que forneça uma string de conexãoApplicationDbContext
enquanto trabalha com asdotnet ef
ferramentas cli.A string de conexão pode apontar apenas para localdb, já que
dotnet ef migrations add
não se conecta ao banco de dados, ela só precisa ser capaz de instanciar seu arquivoDbContext
.