Após seguir os passos da aula e testar, acontece um erro interno. Mandar uma screenshot abaixo.
Os outros endpoints estão ok ("/" e "/Artistas").
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Após seguir os passos da aula e testar, acontece um erro interno. Mandar uma screenshot abaixo.
Os outros endpoints estão ok ("/" e "/Artistas").
Olá, tudo bem?
Poderia compartilhar seu Program.cs e seu Dal.cs?
Program.cs
using Microsoft.AspNetCore.Mvc;
using ScreenSound.API.Endpoints;
using ScreenSound.Banco;
using ScreenSound.Modelos;
using ScreenSound.Shared.Modelos.Modelos;
using System.Text.Json.Serialization;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(options => options.SerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
builder.Services.AddDbContext<ScreenSoundContext>();
builder.Services.AddTransient<DAL<Artista>>(); // usa o [FromServices]
builder.Services.AddTransient<DAL<Musica>>();
builder.Services.AddTransient<DAL<Genero>>();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(options => options.SerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.AddEndPointsArtistas();
app.AddEndPointsMusicas();
app.AddEndPointGeneros();
app.UseSwagger();
app.UseSwaggerUI();
app.Run();
DAL.cs
using ScreenSound.Modelos;
namespace ScreenSound.Banco;
public class DAL<T> where T : class
{
private readonly ScreenSoundContext context;
public DAL(ScreenSoundContext context)
{
this.context = context;
}
public IEnumerable<T> Listar()
{
return context.Set<T>().ToList();
}
public IEnumerable<T> ListarPor(Func<T, bool> condicao)
{
return context.Set<T>().Where(condicao);
}
public void Adicionar(T objeto)
{
context.Set<T>().Add(objeto);
context.SaveChanges();
}
public void Atualizar(T objeto)
{
context.Set<T>().Update(objeto);
context.SaveChanges();
}
public void Deletar(T objeto)
{
context.Set<T>().Remove(objeto);
context.SaveChanges();
}
public T? RecuperarPor(Func<T, bool> condicao)
{
return context.Set<T>().FirstOrDefault(condicao);
}
}
Para resolver você precisa adicionar uma linha a sua string de conexão sql no arquivo "ScreenSoundContext". Ela vai ficar assim
private string connectionString = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=ScreenSoundV0;Integrated Security=True;Encrypt=False;Trust Server Certificate=True;Application Intent=ReadWrite;Multi Subnet Failover=True; MultipleActiveResultSets=true";
O comando que adicionei foi esse: (MultipleActiveResultSets=true)