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(); }
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(); }
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(); }
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(); }
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(); }
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. */ }
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(); }
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(); }