private async Task CadastarCategorias(int idLivro, int[] categoriasID)
 {
     foreach (var item in categoriasID)
     {
         LivroCategoria livroCategoria = new LivroCategoria()
         {
             LivroID = idLivro, CategoriaID = item
         };
         await _livroCategoriaServico.AddAsync(livroCategoria);
     }
 }
        public override List <EntidadeDominio> Consultar(EntidadeDominio entidade)
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }

            LivroCategoria categoria = (LivroCategoria)entidade;
            StringBuilder  sql       = new StringBuilder();

            sql.Append("SELECT * FROM livro_cat JOIN cat_livro ON cat_livro.id_cat_livro = livro_cat.id_cat_livro  ");
            sql.Append(" WHERE 1 = 1 ");

            if (categoria.ID != 0)
            {
                sql.Append("AND livro_cat.id_livro = ?1 ");
            }

            sql.Append("ORDER BY cat_livro.nome_cat_livro");


            pst.CommandText = sql.ToString();
            parameters      = new MySqlParameter[]
            {
                new MySqlParameter("?1", categoria.ID)
            };

            pst.Parameters.Clear();
            pst.Parameters.AddRange(parameters);
            pst.Connection  = connection;
            pst.CommandType = CommandType.Text;

            reader = pst.ExecuteReader();

            // Lista de retorno da consulta do banco de dados, que conterá os produtores encontrados
            List <EntidadeDominio> categorias = new List <EntidadeDominio>();

            while (reader.Read())
            {
                categoria                     = new LivroCategoria();
                categoria.ID                  = Convert.ToInt32(reader["id_livro"]);
                categoria.Categoria.ID        = Convert.ToInt32(reader["id_cat_livro"]);
                categoria.Categoria.Nome      = reader["nome_cat_livro"].ToString();
                categoria.Categoria.Descricao = reader["descricao_cat_livro"].ToString();

                categorias.Add(categoria);
            }
            connection.Close();
            return(categorias);
        }
        private async Task VerificarAlteracoesCategorias(int livroID, int[] categoriasID)
        {
            List <LivroCategoria> livrosCategorias = await _livroCategoriaServico.FindAllAsync(x => x.LivroID == livroID);

            foreach (var item in categoriasID)
            {
                if (!(livrosCategorias.Exists(x => x.CategoriaID == item)))
                {
                    LivroCategoria novo = new LivroCategoria()
                    {
                        LivroID = livroID, CategoriaID = item
                    };
                    await _livroCategoriaServico.AddAsync(novo);
                }
                else
                {
                    livrosCategorias.RemoveAll(x => x.CategoriaID == item);
                }
            }
            foreach (var item in livrosCategorias)
            {
                await _livroCategoriaServico.RemoveAsync(item);
            }
        }