Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Detalhamento] Da atualização no banco de dados

Vamos detalhar o funcionamento do seu código para entender se ele lida corretamente com a atualização de entidades, e se o Entity Framework Core (EF Core) irá refletir essas mudanças no banco de dados.

Contexto do Código

Estamos utilizando um método chamado GeneroRequestValidateExist para verificar se os gêneros já existem no banco de dados e, se não, adicionar novos gêneros. Esse método é utilizado para configurar a propriedade Generos de uma entidade Musica quando você está manipulando uma requisição MusicaRequest.

Função GeneroRequestValidateExist

private static ICollection<Genero> GeneroRequestValidateExist(ICollection<GeneroRequest> generosRequest, GenericDAL<Genero> dalGenero)
{
    var listaDeGenerosUnicos = new List<Genero>(); // Inicializa uma lista vazia para armazenar os gêneros convertidos.

    foreach (var generoRequest in generosRequest) // Itera sobre cada item da coleção de GeneroRequest.
    {
        var entity = GeneroRequestToEntity(generoRequest); // Converte GeneroRequest para a entidade Genero.

        // Verifica se já existe um gênero no banco de dados com o mesmo nome (ignorando diferenças de maiúsculas/minúsculas).
        var generoRecuperado = dalGenero.RecuperarObjPor(generoEntity => generoEntity.Nome.ToUpper().Equals(generoRequest.Nome.ToUpper()));

        if (generoRecuperado is not null) // Se o gênero já existe no banco de dados...
        {
            listaDeGenerosUnicos.Add(generoRecuperado); // Adiciona o gênero recuperado à lista.
        }
        else // Se o gênero não existe no banco de dados...
        {
            listaDeGenerosUnicos.Add(entity); // Adiciona a nova entidade Genero à lista.
        }
    }

    return listaDeGenerosUnicos; // Retorna a lista de gêneros convertidos.
}

Endpoint POST /Musicas

app.MapPost("/Musicas", ([FromServices] GenericDAL<Musica> dalMusica,
    [FromServices] GenericDAL<Genero> dalGenero,
    [FromBody] MusicaRequest musicaRequest) =>
{
    var musicaObj = new Musica(musicaRequest.nome)
    {
        ArtistaId = musicaRequest.ArtistaId,
        AnoLancamento = musicaRequest.anoLancamento,
        Generos = musicaRequest.Generos is not null
            ? GeneroRequestValidateExist(musicaRequest.Generos, dalGenero)
            : new List<Genero>()
    };

    dalMusica.Adicionar(musicaObj);
    return Results.Created();
});

Análise do Fluxo de Atualização

  1. Verificação e Conversão dos Gêneros:

    • Para cada GeneroRequest, você verifica se o gênero já existe no banco de dados.
    • Se existe, você recupera e adiciona o gênero existente à lista.
    • Se não existe, você converte o GeneroRequest para uma entidade Genero e adiciona à lista.
  2. Associação dos Gêneros à Música:

    • A lista resultante de gêneros é associada à propriedade Generos do objeto Musica.
  3. Adição da Música ao Banco de Dados:

    • Você adiciona o objeto Musica ao contexto do EF Core através do método Adicionar de GenericDAL<Musica>.

Atualização das Entidades

  • EF Core e Rastreamento de Mudanças:

    • EF Core rastreia automaticamente as entidades que foram recuperadas do banco de dados e quaisquer alterações feitas nelas enquanto elas estão sendo rastreadas pelo contexto.
    • Quando você chama SaveChanges, EF Core persiste todas as alterações rastreadas no banco de dados.
  • Adição de Gêneros Existentes:

    • Se um gênero já existe, ele é recuperado e adicionado à lista de gêneros da música. EF Core irá detectar que não houve mudanças nesses objetos e não tentará adicioná-los novamente.
  • Adição de Novos Gêneros:

    • Se um gênero não existe, ele é criado como uma nova entidade. Quando você chama SaveChanges, EF Core adicionará essa nova entidade ao banco de dados.

Resumo

  • Validação e Conversão: GeneroRequestValidateExist verifica e converte GeneroRequest em entidades Genero.
  • Rastreamento pelo EF Core: EF Core rastreia automaticamente as entidades recuperadas e persiste as alterações.
  • Operações no Banco de Dados: Gêneros existentes são associados, e novos gêneros são adicionados ao banco de dados.
2 respostas
solução!

Olá, Guilherme.

Tudo bem?

Pelo que entendi você criou esse "documento" com um resumão e detalhamento de como é feita a atualização do banco de dados, desde a função, passando pelo endpoint até o fluxo de atualização das entidades, utilizando o Entity Framework. Parabéns ficou muito legal. Isso mostra que está praticando e evoluindo e principalmente que está entendendo cada etapa. Top! Valeu por compartilhar.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.

Sim Renan, de forma resumida é isso mesmo, para entender quando e por que o EF atualiza.