public void Cadastrar(AmigoModel modelo_)
 {
     // INSERT INTO
     _conexao.Amigos.Add(modelo_);
     // Comentado abaixo porque começamos a utilizar o UnitOfWork
     //_conexao.SaveChanges();
 }
        // Criamos dois métodos para simular o padrão LAZY LOADING.
        // Quando falamos de carregamento (SELECT, Bucar dados), podemos fazer dois tipos de carregamentos
        // EAGER LOADING (CARREGAMENTO ANTECIPADO)
        // Trazemos tudo de uma única vez, mesmo sem precisar. Pedido (Clientes, Itens Pedido, Produto)

        // LAZY LOADING (CARREGAMENTO TARDIO)
        // Trazemos de pokinho e pokinho, conforme a necessidade.
        // 1) Pedidos,
        // 2) Clientes,
        // 3) Produtos

        public IList <AmigoModel> ListarEagerLoading()
        {
            var amigos = new List <AmigoModel>();

            for (int i = 1; i <= 10; i++)
            {
                var novoAmigo = new AmigoModel();
                novoAmigo.Codigo            = i;
                novoAmigo.Nome              = "Nome " + i;
                novoAmigo.Email             = "email" + i + "@teste.com";
                novoAmigo.CodigoSexo        = 1;
                novoAmigo.CodigoEstadoCivil = 2;

                // EAGER LOADING (Trouzemos tudo junto)
                novoAmigo.Sexo = new SexoModel {
                    Codigo = 1, Descricao = "Feminino", DataCadastro = DateTime.Now
                };

                novoAmigo.Civil = new EstadoCivilModel {
                    Codigo = 1, Descricao = "Casado(a)", DataCadastro = DateTime.Now
                };
                amigos.Add(novoAmigo);
            }

            return(amigos);
        }
        public void Testar_Classe_Negocio_Amigo_Erro()
        {
            var erros = new List<String>();

            // A classe que armazenamos os dados (da página)
            var dadosTela = new AmigoModel
            {
                Nome = "Amigo 01"
            };

            // A classe de negócio (TM)
            // O único comando da classe que pode ser publico, é o TEMPLATE METHOD (Etapas) todos os outros tem que ser protegidos só serão visiveis dentro
            // da classe filha, da classe que herdou!
            var negocio = new AmigoBusiness(dadosTela);
            
            // Sempre que você disparar um evento, obrigatoriamente tem que interceptar (Monitorar), escutar ele! Se não capturar da pau de NULL REFERENCE.

            // Criamos um metodo anonimo (INLINE) para receber as mensagens de erro daquele eveto.
            // => Expressão lambda é o corpo do método

            // "+=" é igual a capturar o evento escutado.
            // "=>" é igual a Executar
            // "{}" é o corpo do método (inline)
            
            // É um ponteiro do memória
            negocio.EnviarErros += (listaErros) => {
                erros = listaErros;
            }; 
            
            negocio.Executar();

            Assert.AreNotEqual(0, erros.Count);
        }
        public void Testar_Amigos_Eager_Loading()
        {
            // YAGNI (Você realmente precisa disso AGORA?)
            var modelo = new AmigoModel();
            var amigos = modelo.ListarEagerLoading();

            Assert.AreNotEqual(null, amigos[0].Sexo);
            Assert.AreNotEqual(null, amigos[0].Civil);
        }
        public ActionResult Cadastrar(AmigoModel amigoModel)
        {
            _unidadeAmigo.AmigoDAO.Cadastrar(amigoModel);
            _unidadeAmigo.Confirmar();

            var amigos = _unidadeAmigo.AmigoDAO.Listar();

            return RedirectToAction("Listar");
        }
        public void Testar_Amigos_Lazy_Loading()
        {
            // YAGNI (Você realmente precisa disso AGORA?)
            var modelo = new AmigoModel();
            var amigos = modelo.ListarLazyLoading();

            // Nesse momento mandamos trazer os dados das tabelas, relacionadas (CARREGAMENTO TARDIO) buscamos só quando precisamos.

            Assert.AreNotEqual(null, amigos[0].Sexo);
            Assert.AreNotEqual(null, amigos[0].Civil);
        }
        public void Testar_Cadastro_Amigo()
        {
            var novoAmigo = new AmigoModel();
            
            novoAmigo.Nome = "Amigo 22:12";
            novoAmigo.Email = "*****@*****.**";
            novoAmigo.CodigoSexo = 2;
            novoAmigo.DataNascimento = new DateTime(1988, 11, 03);

            // O que caracteriza o padrão é não ter parametros de entrada e método.
            // A variável já é o proprio registro (Insert = Dado(INFORMAÇÃO)), na mesma classe temos armazenamento de informações e acesso a dados
            novoAmigo.Add();
        }
        public void Testar_Classe_Negocio_Amigo_Sucesso()
        {
            // A classe que armazenamos os dados (da página)
            var dadosTela = new AmigoModel
            {
                Nome = "Amigo 01",
                Email = "*****@*****.**",
                DataNascimento = DateTime.Now,
                CodigoSexo = 2
            };

            // A classe de negócio (TM)
            // O único comando da classe que pode ser publico, é o TEMPLATE METHOD (Etapas) todos os outros tem que ser protegidos só serão visiveis dentro
            // da classe filha, da classe que herdou!
            var negocio = new AmigoBusiness(dadosTela);
            negocio.Executar();
        }
        // Padrão LAZY LOADING, só levamos os dados quando realmente formos precisar (Tela, Relatorio)
        public IList <AmigoModel> ListarLazyLoading()
        {
            var amigos = new List <AmigoModel>();

            for (int i = 1; i <= 10; i++)
            {
                var novoAmigo = new AmigoModel();
                novoAmigo.Codigo            = i;
                novoAmigo.Nome              = "Nome " + i;
                novoAmigo.Email             = "email" + i + "@teste.com";
                novoAmigo.CodigoSexo        = 1;
                novoAmigo.CodigoEstadoCivil = 2;

                amigos.Add(novoAmigo);
            }

            return(amigos);
        }
        // Criamos dois métodos para simular o padrão LAZY LOADING.
        // Quando falamos de carregamento (SELECT, Bucar dados), podemos fazer dois tipos de carregamentos
        // EAGER LOADING (CARREGAMENTO ANTECIPADO)
        // Trazemos tudo de uma única vez, mesmo sem precisar. Pedido (Clientes, Itens Pedido, Produto)

        // LAZY LOADING (CARREGAMENTO TARDIO)
        // Trazemos de pokinho e pokinho, conforme a necessidade. 
        // 1) Pedidos, 
        // 2) Clientes, 
        // 3) Produtos

        public IList<AmigoModel> ListarEagerLoading()
        {
            var amigos = new List<AmigoModel>();
            for (int i = 1; i <= 10; i++)
            {
                var novoAmigo = new AmigoModel();
                novoAmigo.Codigo = i;
                novoAmigo.Nome = "Nome " + i;
                novoAmigo.Email = "email" + i + "@teste.com";
                novoAmigo.CodigoSexo = 1;
                novoAmigo.CodigoEstadoCivil = 2;

                // EAGER LOADING (Trouzemos tudo junto)
                novoAmigo.Sexo = new SexoModel { Codigo = 1, Descricao = "Feminino", DataCadastro = DateTime.Now };

                novoAmigo.Civil = new EstadoCivilModel { Codigo = 1, Descricao = "Casado(a)", DataCadastro = DateTime.Now };
                amigos.Add(novoAmigo);
            }

            return amigos;
        }
 public void Testar_Exclusao_Amigo()
 {
     var amigoExcluido = new AmigoModel();
     amigoExcluido.Codigo = 1;
     amigoExcluido.Remove();
 }
 public void Atualizar(AmigoModel modelo_)
 {
     // UPDATE TABLE
     _conexao.Entry(modelo_).State = EntityState.Modified;
     _conexao.SaveChanges();
 }
 public void Cadastrar(AmigoModel modelo_)
 {
     // INSERT INTO
     _conexao.Amigos.Add(modelo_);
     _conexao.SaveChanges();
 }
 public AmigoBusiness(AmigoModel modelo_)
 {
     this._modelo = modelo_;
 }
        // Padrão LAZY LOADING, só levamos os dados quando realmente formos precisar (Tela, Relatorio)
        public IList<AmigoModel> ListarLazyLoading()
        {
            var amigos = new List<AmigoModel>();
            for (int i = 1; i <= 10; i++)
            {
                var novoAmigo = new AmigoModel();
                novoAmigo.Codigo = i;
                novoAmigo.Nome = "Nome " + i;
                novoAmigo.Email = "email" + i + "@teste.com";
                novoAmigo.CodigoSexo = 1;
                novoAmigo.CodigoEstadoCivil = 2;

                amigos.Add(novoAmigo);
            }

            return amigos;

        }