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); } }
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}"); } }
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)"); } } } }