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").
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)