public List <Estoque> Listar()
        {
            //Define string de conexão
            string strConexao = "SERVER=localhost; DataBase=videolocadora; UID=root; pwd=root";

            //Cria conexão com banco de dados
            using (MySqlConnection conn = new MySqlConnection(strConexao))
            {
                //Abre a conexão com o banco de dados
                conn.Open();

                //Inicia comando para o banco de dados
                using (MySqlCommand cmd = new MySqlCommand())
                {
                    //Monta a consulta no banco de dados
                    string query = "SELECT * FROM estoque";

                    //Passa informação de conexão e consulta para o comando
                    cmd.Connection  = conn;
                    cmd.CommandText = query;

                    //Cria um adapter que usará a instrução SQL para acessar a tabela de Estoque
                    using (MySqlDataAdapter da = new MySqlDataAdapter())
                    {
                        da.SelectCommand = cmd;

                        //Cria dataset para preencher a informação vinda do banco de dados
                        DataSet ds = new DataSet();
                        //Preenche o dataset via adapter
                        da.Fill(ds, "estoque");

                        //Recupera as informações do dataset e guarda em lista para retornar para a VIEW
                        List <Estoque> lstRetorno = ds.Tables["estoque"].AsEnumerable().Select(x => new Estoque
                        {
                            Id         = x.Field <int>("id"),
                            Quantidade = x.Field <int>("quantidade"),
                            IdFilme    = x.Field <int>("filme_id")
                        }).ToList();

                        foreach (Estoque estoque in lstRetorno)
                        {
                            // Recuperando cada filme da lista de estoque
                            FilmeController filmeController = new FilmeController();
                            estoque.Filme = filmeController.Buscar(estoque.IdFilme);
                        }

                        //Retorna a informação recuperada
                        return(lstRetorno);
                    }
                }
            }
        }
        public Estoque Buscar(int idFilme)
        {
            //Define string de conexão
            string strConexao = "SERVER=localhost; DataBase=videolocadora; UID=root; pwd=root";

            //Cria conexão com banco de dados
            using (MySqlConnection conn = new MySqlConnection(strConexao))
            {
                //Abre a conexão com o banco de dados
                conn.Open();

                //Inicia comando para o banco de dados
                using (MySqlCommand cmd = new MySqlCommand())
                {
                    //Monta a consulta no banco de dados
                    string query = $"SELECT * FROM estoque WHERE filme_id = {idFilme}";

                    //Passa informação de conexão e consulta para o comando
                    cmd.Connection  = conn;
                    cmd.CommandText = query;

                    //Executa a instrução SQL
                    MySqlDataReader reader = cmd.ExecuteReader();

                    //Monta objeto de retorno
                    Estoque retorno = new Estoque();

                    //Verifica se existe registro retornado do banco de dados
                    while (reader.Read())
                    {
                        //Popula objeto de retorno com informações vindas do banco de dados
                        retorno.Id         = (int)reader["id"];
                        retorno.Quantidade = (int)reader["quantidade"];
                        retorno.IdFilme    = (int)reader["filme_id"];
                    }

                    // Recuperando informações do filme pelo ID
                    FilmeController filmeController = new FilmeController();
                    retorno.Filme = filmeController.Buscar(retorno.IdFilme);

                    return(retorno);
                }
            }
        }
        /// <summary>
        /// Gera arquivo em CSV
        /// </summary>
        public void GerarArquivoCSV()
        {
            //Informa o local e nome do arquivo a ser gerado
            string arquivoCSV = @"C:\Temp\Filmes.csv";

            //Cria o arquivo CSV no local indicado
            using (StreamWriter writer = new StreamWriter(arquivoCSV, false, Encoding.UTF8))
            {
                //Monta o cabeçalho do arquivo
                writer.WriteLine("ID;TITULO;LANCAMENTO;SINOPSE;GENERO_CINEMATOGRAFICO;CLASSIFICACAO_INDICATIVA");

                //Instancia objeto controller de filme
                FilmeController controller = new FilmeController();

                //Navega na lista de Filme
                foreach (var item in controller.Listar())
                {
                    //Escreve as informações dos filmes
                    writer.WriteLine($"{item.Id};{item.Titulo};{item.Lancamento};{item.Sinopse};{item.GeneroCinematografico};{item.ClassificacaoIndicativa.Indicacao + " - " + item.ClassificacaoIndicativa.Descricao}");
                }
            }
        }
        /// <summary>
        /// Gera arquivo em XML
        /// </summary>
        public void GerarArquivoXML()
        {
            //Informa o local e nome do arquivo a ser gerado
            string arquivoXML = @"C:\Temp\Filmes.xml";

            //Instancia objeto controller de filme
            FilmeController controller = new FilmeController();
            List <Filme>    lstFilmes  = controller.Listar();

            //Efetua a montagem das informações do arquivo XML (via LINQ) com os nós (ELEMENT) e atributos (ATTRIBUTE)
            var docXML = new XDocument(new XElement("Filmes",
                                                    lstFilmes.Select(x => new XElement("Filme",
                                                                                       new XAttribute("Id", x.Id),
                                                                                       new XAttribute("Titulo", x.Titulo),
                                                                                       new XAttribute("Lancamento", x.Lancamento),
                                                                                       new XAttribute("Sinopse", x.Sinopse),
                                                                                       new XAttribute("Genero_Cinematografico", x.GeneroCinematografico.Genero),
                                                                                       new XAttribute("Classificacao_Indicativa", x.ClassificacaoIndicativa.Indicacao + " - " + x.ClassificacaoIndicativa.Descricao)))));

            //Salva o arquivo XML no local indicado
            docXML.Save(arquivoXML);
        }