예제 #1
0
        private static void InserirVariasRegistrosDeUmaEntidade()
        {
            var produtos = new Produto[] {
                new Produto
                {
                    Descricao    = "Em passa 01",
                    CodigoBarras = "329487230483276409",
                    Valor        = 13.21m,
                    TipoProduto  = ValueObjects.TipoProduto.MercadoriaParaRevenda
                },
                new Produto
                {
                    Descricao    = "Em passa 02",
                    CodigoBarras = "498057320948673432",
                    Valor        = 49.18m,
                    TipoProduto  = ValueObjects.TipoProduto.Embalagem
                }
            };

            using var db = new Data.CursoEFCoreContext();

            db.Produtos.AddRange(produtos);

            db.SaveChanges();
        }
예제 #2
0
        private static void InserirUmRegistroDeDiferentesEntidades()
        {
            var produto = new Produto
            {
                Descricao    = "Produto Xis",
                CodigoBarras = "329487230483276409",
                Valor        = 13.21m,
                TipoProduto  = ValueObjects.TipoProduto.MercadoriaParaRevenda
            };

            var cliente = new Cliente {
                Nome     = "Lívia Souza",
                Telefone = "187974967",
                CEP      = "190" +
                           "26680",
                Cidade = "Pres. Prudente",
                Estado = "SP",
                Email  = "liviags.com"
            };

            using var db = new Data.CursoEFCoreContext();

            db.AddRange(cliente, produto); // disponível a partir do EF Core (Framework não tinha)
            db.SaveChanges();
        }
예제 #3
0
        private static void InserirMuitosDadosComBogus()
        {
            var faker = new Faker <Cliente>("pt_BR")
                        .RuleFor(c => c.Nome, f => f.Name.FullName().Truncar(100))
                        .RuleFor(c => c.Telefone, f => f.Phone.PhoneNumber().ReplaceMany(new string[] { "(", ")", "-", " ", "+" }, "").Truncar(15))
                        .RuleFor(c => c.CEP, f => f.Address.ZipCode("########"))
                        .RuleFor(c => c.Cidade, f => f.Address.City().Truncar(100))
                        .RuleFor(c => c.Estado, f => f.Address.StateAbbr().Truncar(2));

            var clientesFakes = faker.Generate(30);

            using var db = new Data.CursoEFCoreContext();

            db.Clientes.AddRange(clientesFakes);
            db.SaveChanges();
        }
예제 #4
0
        private static void RemoverUmRegistroDeUmaInstancia()
        {
            using var db = new Data.CursoEFCoreContext();

            var clienteRemover = db.Clientes.Find(4);

            if (clienteRemover == null)
            {
                return;
            }

            // Existem 3 formas de excluir

            db.Clientes.Remove(clienteRemover); // mais legível
            //db.Remove(clienteRemover);
            //db.Entry(clienteRemover).State = EntityState.Deleted;

            db.SaveChanges();
        }
예제 #5
0
        private static void AtualizarSimples()
        {
            using var db = new Data.CursoEFCoreContext();

            var cliente = db.Clientes.Where(c => c.Nome.Contains("Elton")).FirstOrDefault();

            if (cliente == null)
            {
                return;
            }


            /* Modo otimizado (instrução UPDATE somente com o campo alterado). O EF faz uma pré checagem no valor do campo para detectar que realmente ficou diferente, se sim, marca a instância como modificada. Se não, nem realizada o UPDATE no banco.
             */
            cliente.Nome = "Elton Souza IV";
            //db.Entry(cliente).State = EntityState.Modified; // se o valor não mudar, mas eu ainda quero realizar o UPDATE.

            //db.Clientes.Update(cliente); // se fizer dessa forma, o EF irá sobrescrever todas as informações. Gerando o comando UPDATE com todos os campos.

            db.SaveChanges();
        }
예제 #6
0
        private static void Inserir()
        {
            var produto = new Produto()
            {
                Descricao    = "Produto 1",
                CodigoBarras = "54368446146134537137697",
                Valor        = 32.9m
            };

            using var db = new Data.CursoEFCoreContext();
            // Opção 1: básica
            db.Produtos.Add(produto);

            // Opção 2: utilizando método genérico
            db.Set <Produto>().Add(produto);

            // Opção 3: forçando o rastreamento de uma determinada entidade
            db.Entry(produto).State = EntityState.Added; // indico explicitamente que a entidade está em estado de adição.

            // Opção 4: própria instância do contexto
            db.Add(produto);

            /* Das 4 formas acima, as mais indicadas são a 1 e 2.
             * As operações acima foram feitas apenas em memória, ainda não persistidas em memória.
             */

            var registros = db.SaveChanges(); // tudo está sendo rastreado e que contenha modificações.

            System.Console.WriteLine($"Registros: {registros}");
            // Saída do console:
            // Registros: 1

            /* Apesar dos 4 métodos acima estarem realizando o procedimento de adição do produto, que aparentemente está sendo feitas 4 vezes.
             * O EF adiciou apenas 1 registro.
             * Pq?
             * O EF faz o rastreamento da instância da objeto do tipo da entidade, como "produto" não teve alteração
             * depois de sua inicialização (e entre os 4 procedimentos de inserção), ao realizar o salvamento das modificações,
             * o EF detecta apenas uma modificação.
             */
        }
예제 #7
0
        private static void IncluirInstanciasNaoRastreadas()
        {
            using var db = new Data.CursoEFCoreContext();

            var cliente = new Cliente
            {
                Nome     = "Josefina da Silva",
                Telefone = "187545754",
                CEP      = "18741852",
                Estado   = "PR",
                Cidade   = "Londrina"
            };

            db.Attach(cliente); // o State fica como Added

            if (db.Entry(cliente).State == EntityState.Unchanged)
            {
                return;
            }

            db.SaveChanges();
        }
예제 #8
0
        private static void InserirPedidoItem()
        {
            using var dbContext = new Data.CursoEFCoreContext();

            var cliente  = dbContext.Clientes.FirstOrDefault();
            var produto  = dbContext.Produtos.FirstOrDefault();
            var produto2 = dbContext.Produtos.FirstOrDefault(c => c.Id != produto.Id);

            if (cliente == null || produto == null)
            {
                return;
            }

            var quantidade = 3;

            var pedido = new Pedido
            {
                ClienteId    = cliente.Id,
                IniciadoEm   = DateTime.Now,
                FinalizadoEM = DateTime.Now,
                Observacao   = "Pedido teste.",
                TipoFrete    = ValueObjects.TipoFrete.SemFrete,
                Status       = true,
                Itens        = new List <PedidoItem>
                {
                    new PedidoItem
                    {
                        ProdutoId     = produto.Id,
                        Quantidade    = quantidade,
                        Valor         = quantidade * produto.Valor,
                        ValorDesconto = 0
                    }
                }
            };

            dbContext.Pedidos.Add(pedido);

            dbContext.SaveChanges();
        }