private static void ConsultasComPropriedadesNavegacaoCarregamentoExplicito() { // Significa que são carregados pelo usuário em um momento posterior; // Parece com Lazy Loading, mas de forma explícita; Console.WriteLine("Carregamento Explícito."); Console.WriteLine(); using var db = new Data.CursoEFCoreContext(); var pedidoItem = db.PedidoItens.FirstOrDefault(); db.Entry(pedidoItem) .Reference(pi => pi.Pedido) // Inicialmente não foi carregado... .Load(); // ... carregamento explícito Console.WriteLine(pedidoItem.Pedido.Observacao); }
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(); }