Esempio n. 1
0
        private static void ConsultarProdutos()
        {
            using var db = new NorthwindDb();
            var loggerFactory = db.GetService <ILoggerFactory>();

            loggerFactory.AddProvider(new ConsoleLoggerProvider());
            WriteLine("Produtos que custam mais do que um determinado preço, do mais caro para o mais barato:");
            string  input;
            decimal preco;

            do
            {
                Write("Informe um preço: ");
                input = ReadLine();
            } while (!decimal.TryParse(input, out preco));

            IOrderedEnumerable <Produto> produtos = db.Produtos.AsEnumerable()        // Carregue todos os produtos, como um enumerável
                                                    .Where(p => p.Preco > preco)      // onde o preço do produto é maior que preco
                                                    .OrderByDescending(p => p.Preco); // Em ordem decrescente de preço

            foreach (var p in produtos)
            {
                WriteLine("{0}: {1} custa {2:R$#,##0.00} e possui {3} unidades em estoque.", p.ProdutoId, p.Nome, p.Preco, p.Estoque);
            }
        }
Esempio n. 2
0
        private static void ListarCategorias(bool eagerLoading)
        {
            using var db = new NorthwindDb();
            var loggerFactory = db.GetService <ILoggerFactory>();

            loggerFactory.AddProvider(new ConsoleLoggerProvider());
            WriteLine("Categorias:");
            IQueryable <Categoria> categorias = db.Categorias;

            if (eagerLoading)
            {
                categorias = db.Categorias.Include(c => c.Produtos);
            }
            foreach (var c in categorias)
            {
                WriteLine($"- {c.Nome}");
            }
        }
Esempio n. 3
0
        private static void ConsultarProdutosPorCategoria()
        {
            using var db = new NorthwindDb();
            var loggerFactory = db.GetService <ILoggerFactory>();

            loggerFactory.AddProvider(new ConsoleLoggerProvider());
            WriteLine("Categorias e quantos produtos possuem:");
            //Uma consulta que recupera todas as categorias
            //e, para cada categoria, seus produtos relacionados:
            IQueryable <Categoria> categorias; //= db.Categorias; //Usa LazyLoading se o Proxy estiver configurado.

            //Desabilita o LazyLoading nesta instância de banco
            db.ChangeTracker.LazyLoadingEnabled = false;

            Write("Habilitar carregamento antecipado (eager loading)? (S/N): ");
            bool eagerLoading = (ReadKey().Key == System.ConsoleKey.S);

            WriteLine();
            bool explicitLoading = false;

            if (eagerLoading)
            {
                categorias = db.Categorias.Include(c => c.Produtos);
            }
            else
            {
                // Categorias *SEM* carregar Produtos devido à operação de desabilitar o LazyLoading.
                categorias = db.Categorias;
                Write("Habilitar carregamento explícito (explicit loading)? (S/N): ");
                explicitLoading = (ReadKey().Key == System.ConsoleKey.S);
                WriteLine();
            }

            foreach (var c in categorias)
            {
                if (explicitLoading)
                {
                    Write($"Carregar explicitamente os produtos para {c.Nome}? (S/N): ");
                    var opcao = ReadKey();
                    WriteLine();
                    if (opcao.Key == System.ConsoleKey.S)
                    {
                        //Carregar explicitamente os produtos
                        //Entry(c) é o registro desta categoria c dentro da instância db
                        var produtos = db.Entry(c).Collection(x => x.Produtos);

                        //Se o conjunto de produtos não estava carregado (rastreado) pelo objeto db, passe a fazê-lo.
                        if (!produtos.IsLoaded)
                        {
                            produtos.Load();
                        }
                    }
                    WriteLine($"{c.Nome} possui {c.Produtos.Count} produtos.");
                    foreach (var p in c.Produtos)
                    {
                        WriteLine($" — {p.Nome} ({p.Estoque} unidades no estoque)");
                    }
                }
                else if (eagerLoading)
                {
                    WriteLine($"{c.Nome} possui {c.Produtos.Count} produtos.");
                    foreach (var p in c.Produtos)
                    {
                        WriteLine($" — {p.Nome} ({p.Estoque} unidades no estoque)");
                    }
                }
            }
        }