示例#1
0
        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);
        }
示例#2
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.
             */
        }
示例#3
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();
        }