Estou tendo este problema após ter terminado a aula Refatorando ArtistaDAL: An error occurred while saving the entity changes.
Aqui estão meus códigos:
Program.cs:
using ScreenSound.Banco;
using ScreenSound.Menus;
using ScreenSound.Modelos;
try
{
var context = new ScreenSoundContext();
var artistaDAL = new ArtistaDAL(context);
var novoArtista = new Artista("Creepy Nuts", "Creepy Nuts é uma dupla japonesa de Hip Hop composta por R-Shitei e DJ Matsunaga. R-Shitei, cujo nome de rap significa “R-Rated”, canta rimas aceleradas sobre as faixas cativantes de seu parceiro. A dupla foi formada em 2013 e lançou seu primeiro mini-álbum em janeiro de 2016.");
artistaDAL.Adicionar(novoArtista);
//artistaDAL.Atualizar(novoArtista);
//artistaDAL.Deletar(novoArtista);
var listaArtistas = artistaDAL.Listar();
foreach (var artista in listaArtistas)
{
Console.WriteLine(artista);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return;
Artista ira = new Artista("Ira!", "Banda Ira!");
Artista beatles = new("The Beatles", "Banda The Beatles");
Dictionary<string, Artista> artistasRegistrados = new();
artistasRegistrados.Add(ira.Nome, ira);
artistasRegistrados.Add(beatles.Nome, beatles);
Dictionary<int, Menu> opcoes = new();
opcoes.Add(1, new MenuRegistrarArtista());
opcoes.Add(2, new MenuRegistrarMusica());
opcoes.Add(3, new MenuMostrarArtistas());
opcoes.Add(4, new MenuMostrarMusicas());
opcoes.Add(-1, new MenuSair());
void ExibirLogo()
{
Console.WriteLine(@"
░██████╗░█████╗░██████╗░███████╗███████╗███╗░░██╗ ░██████╗░█████╗░██╗░░░██╗███╗░░██╗██████╗░
██╔════╝██╔══██╗██╔══██╗██╔════╝██╔════╝████╗░██║ ██╔════╝██╔══██╗██║░░░██║████╗░██║██╔══██╗
╚█████╗░██║░░╚═╝██████╔╝█████╗░░█████╗░░██╔██╗██║ ╚█████╗░██║░░██║██║░░░██║██╔██╗██║██║░░██║
░╚═══██╗██║░░██╗██╔══██╗██╔══╝░░██╔══╝░░██║╚████║ ░╚═══██╗██║░░██║██║░░░██║██║╚████║██║░░██║
██████╔╝╚█████╔╝██║░░██║███████╗███████╗██║░╚███║ ██████╔╝╚█████╔╝╚██████╔╝██║░╚███║██████╔╝
╚═════╝░░╚════╝░╚═╝░░╚═╝╚══════╝╚══════╝╚═╝░░╚══╝ ╚═════╝░░╚════╝░░╚═════╝░╚═╝░░╚══╝╚═════╝░
");
Console.WriteLine("Boas vindas ao Screen Sound 3.0!");
}
void ExibirOpcoesDoMenu()
{
ExibirLogo();
Console.WriteLine("\nDigite 1 para registrar um artista");
Console.WriteLine("Digite 2 para registrar a música de um artista");
Console.WriteLine("Digite 3 para mostrar todos os artistas");
Console.WriteLine("Digite 4 para exibir todas as músicas de um artista");
Console.WriteLine("Digite -1 para sair");
Console.Write("\nDigite a sua opção: ");
string opcaoEscolhida = Console.ReadLine()!;
int opcaoEscolhidaNumerica = int.Parse(opcaoEscolhida);
if (opcoes.ContainsKey(opcaoEscolhidaNumerica))
{
Menu menuASerExibido = opcoes[opcaoEscolhidaNumerica];
menuASerExibido.Executar(artistasRegistrados);
if (opcaoEscolhidaNumerica > 0) ExibirOpcoesDoMenu();
}
else
{
Console.WriteLine("Opção inválida");
}
}
ExibirOpcoesDoMenu();
ArtistaDAL.cs:
using Microsoft.Data.SqlClient;
using ScreenSound.Modelos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ScreenSound.Banco;
internal class ArtistaDAL
{
private readonly ScreenSoundContext context;
public ArtistaDAL(ScreenSoundContext context)
{
this.context = context;
}
public IEnumerable<Artista> Listar()
{
return context.Artistas.ToList();
}
public void Adicionar(Artista artista)
{
context.Artistas.Add(artista);
context.SaveChanges();
}
public void Atualizar(Artista artista)
{
context.Artistas.Update(artista);
context.SaveChanges();
}
public void Deletar(Artista artista)
{
context.Artistas.Remove(artista);
context.SaveChanges();
}
}
ScreenSoundContext.cs:
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using ScreenSound.Modelos;
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ScreenSound.Banco;
internal class ScreenSoundContext: DbContext
{
public DbSet<Artista> Artistas { get; set; }
private string connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=ScreenSound;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False";
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(connectionString);
}
}