private static void SelectComClausula() { using (var contexto = new LojaContext()) { var cliente = contexto.Clientes.Include(e => e.Endereco).FirstOrDefault(); Console.WriteLine($"Endereco de entrega {cliente.Endereco.Logradouro}"); /* * Com o objeto contexto, chamaremos o método Entry() passando a referência de produto. * Após, pegaremos a coleção da propriedade Compra com o método Collection(p => p.Compras). * Em seguida faremos uma Query(), que filtrará com a condição Where(c => c.Preco > 10). * Por último, carregaremos com Load() na referência passada no Entry(). */ var produto = contexto .Produtos .Where(p => p.Id == 9004) .FirstOrDefault(); contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 10) .Load(); Console.WriteLine($"Mostrando as compras do produto {produto.Nome}"); foreach (var item in produto.Compras) { Console.WriteLine("\t" + item); } } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { ChamaLogger(contexto); var cliente = contexto.Clientes .Include(c => c.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"Endereço: {cliente.EnderecoDeEntrega}"); //var produto = contexto // .Produtos // .Where(p => p.Id == 2002) // .Include(p => p.Compras) // .FirstOrDefault(); var produto = contexto .Produtos .Where(p => p.Id == 2002) .FirstOrDefault(); contexto.Entry(produto) .Collection(p => p.Compras) .Query() // <- Sub consulta .Where(c => c.Preco > 20) // <- Agora sim podemos aplicar condições às compras .Load(); Console.WriteLine($"\nCompras de {produto.Nome} com valor acima de R$20,00:"); foreach (var item in produto.Compras) { Console.WriteLine(item); } } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { var cliente = contexto .Clientes .Include(e => e.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"Endereço de entrga: {cliente.EnderecoDeEntrega.Logradouro}"); var produto = contexto .Produtos .Where(p => p.Id == 2004) .FirstOrDefault(); contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 10) .Load(); Console.WriteLine($"Mostrando as compras do produto {produto.Nome}"); foreach (var item in produto.Compras) { Console.WriteLine(item); } } Console.ReadKey(); }
static void Main(string[] args) { using (var context = new LojaContext()) { var produto = context .Produtos .Where(p => p.Id == 5002) .First(); context.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Id == 1002) .Load(); Console.WriteLine($"Total em vendas do produto {produto.Nome}"); foreach (var compra in produto.Compras) { Console.WriteLine(compra.Preco); } } Console.ReadKey(); }
static void TestaChengeTracker() { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var produtos = contexto.Produtos.ToList(); ExibeEntries(contexto.ChangeTracker.Entries()); var novoProduto = new Produto() /*adicionando novo ´produto para poder observar a propriedade added*/ { Nome = "sabão em pó", Categoria = "limpeza", PrecoUnitario = 2.99 }; contexto.Produtos.Add(novoProduto); ExibeEntries(contexto.ChangeTracker.Entries()); var p1 = produtos.Last(); contexto.Produtos.Remove(p1); ExibeEntries(contexto.ChangeTracker.Entries()); //contexto.SaveChanges(); var entry = contexto.Entry(novoProduto); Console.WriteLine(entry.Entity.ToString() + "-" + entry.State); //ExibeEntries(contexto.ChangeTracker.Entries()); } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { var cliente = contexto .Clientes .Include(c => c.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"Endereço de Entrega: {cliente.EnderecoDeEntrega.Logradouro}"); var produto = contexto .Produtos .Where(p => p.Id == 5005) .FirstOrDefault(); // aplicando filtro em objetos relacionados contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 10) .Load(); Console.WriteLine($"Mostrando as compras do produto: {produto.Nome}"); foreach (var item in produto.Compras) { Console.WriteLine(item); } } }
private static void LoggerSQLViaEntity() { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var produtos = contexto.Produtos.ToList(); ExibeEntries(contexto.ChangeTracker.Entries()); var novoProduto = new Produto() { Nome = "Sabão em pó", Categoria = "Limpeza", PrecoUnitario = 4.99 }; contexto.Produtos.Add(novoProduto); ExibeEntries(contexto.ChangeTracker.Entries()); contexto.Produtos.Remove(novoProduto); ExibeEntries(contexto.ChangeTracker.Entries()); //var prd = produtos.First(); //contexto.Produtos.Remove(prd); //contexto.SaveChanges(); var entry = contexto.Entry(novoProduto); Console.WriteLine(entry.Entity.ToString() + " - " + entry.State); ExibeEntries(contexto.ChangeTracker.Entries()); } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { var cliente = contexto .Clientes .Include(x => x.EnderecoEntrega) .FirstOrDefault(); Console.WriteLine($"{cliente.EnderecoEntrega.Logradouro}"); var produto = contexto .Produtos .Include(x => x.Compras) .Where(x => x.Id == 2002) .FirstOrDefault(); contexto.Entry(produto) .Collection(x => x.Compras) .Query() .Where(x => x.Preco < 0) .Load(); Console.WriteLine("\n\nCompras: \n"); foreach (var item in produto.Compras) { Console.WriteLine(item.Preco); } } }
private static void ExibeComprasDoProduto() { using (var contexto = new LojaContext()) { // 1 para 1 => cliente/endereco var cliente = contexto .Clientes .Include(c => c.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"Endereco de entrega: { cliente.EnderecoDeEntrega.Logradouro}"); // 1 para N => produto/compras var produto = contexto .Produtos //.Include(p => p.Compras) .Where(p => p.Id == 1002) .FirstOrDefault(); // filtrar entidade relacionada // produto 'pao' com compras com preco acima de 10 contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 1) .Load(); // carregar relacionamento em instancia ja recuperada Console.WriteLine($"Monstrando as compras do produto {produto.Nome}"); foreach (var item in produto.Compras) { Console.WriteLine(item); } } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { LogSqlConsole(contexto); var cliente = contexto .Clientes .Include(c => c.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"Endereço de entrega de {cliente.Nome} é:\n {cliente.EnderecoDeEntrega}"); var produto = contexto .Produtos .Where(p => p.Id == 3002) .FirstOrDefault(); contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco < 20.00) .Load(); Console.WriteLine($"Mostrando as compras do produto:{produto.Nome}"); foreach (var item in produto.Compras) { Console.WriteLine(item); } } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var cliente = contexto .Clientes .Include(c => c.EnderecoDeEntrega) .First(); Console.WriteLine($"Endereço de entrega: {cliente.EnderecoDeEntrega.Logradouro}"); var produto = contexto .Produtos .Where(p => p.Id == 17) .FirstOrDefault(); contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 1) .Load(); Console.WriteLine($"Mostrando as compras do produto {produto.Nome}"); foreach (var item in produto.Compras) { Console.WriteLine("\t" + item); } } }
private static void ListarComprasDeUmProduto() { using (var context = new LojaContext()) { //BUSCA AS COMPRAS DE UM PRODUTO EM APENAS 1 PASSO //var comprasDeUmProduto = context. // Compras // .Include(c => c.Produto) // .Where(c => c.Produto.Id == 3002) // .ToList(); //BUSCA AS COMPRAS DE UM PRODUTO EM APENAS 2 PASSOS //BUSCA UM PRODUTO NO BANCO DE DADOS var produto = context.Produtos.Where(p => p.Id == 3002).FirstOrDefault(); context.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 1) .Load(); foreach (var item in produto.Compras) { Console.WriteLine($"{item.Produto.Nome}, {item.Preco}"); } } }
static void Main(string[] args) { using (var context = new LojaContext()) { context.Database.Migrate(); } using (var context = new LojaContext()) { var cliente = context .Clientes .Include(c => c.Endereco) .FirstOrDefault(); Debug.WriteLine($"Endereco de entrega : {cliente.Endereco.Logradouro}"); var produto = context .Produtos .Include(p => p.Compras) .Where(p => p.Id == 1) .FirstOrDefault(); context.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 10) .Load(); Debug.WriteLine($"Mostrando as compras do produto : {produto.Nome}"); foreach (Compra item in produto.Compras) { Debug.WriteLine(item.Produto); } } }
public static void JoinRelacionamentoUmParaUm() { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var cliente = contexto .Clientes .Include(c => c.EnderecoDeEntrega) // Relacionamento com a tabela enderço .FirstOrDefault(); Console.WriteLine($"Endereço de entrega: {cliente.EnderecoDeEntrega.Logradouro}"); var produto = contexto .Produtos .Include(p => p.Compras) .Where(p => p.Id == 16) .FirstOrDefault(); Console.WriteLine($"\n***************************************************\n"); Console.WriteLine($"Mostrando as compras do produto {produto.Nome}"); Console.WriteLine($"\n***************************************************"); foreach (var item in produto.Compras) { Console.WriteLine(item.Produto); } /* * Executaremos a aplicação com "Ctrl + F5". * Poderemos ver que foi executado um SELECT em Produtos no banco de dados, * buscando o produto com o Id passado no filtro Where(). * Em seguida foi feito um segundo SELECT em Compras, * filtrando pelo Id do produto passado no Entry() e pelo preço. * Por fim, serão apresentados os produtos com preço acima de R$ 10,00. * * Esse cenário é bastante utilizado quando queremos aplicar filtros em * objetos relacionados da aplicação. Esta estratégia é conhecida como * Carregamento Explícito, onde trazemos só o que nos interessa. * * */ // fazendo join e filtrando os dados da tabela join contexto.Entry(produto) // Faz uma pesquina na tabela produto .Collection(p => p.Compras) // Vincula lista de compra na tabela produto .Query() // Faz uma query .Where(c => c.Preco > 10) // filtra a query com as informações da compra .Load(); // carrega os dados da compra. Console.ReadLine(); } }
static void JoinUmParaUmMaisFiltro() { using (var contexto = new LojaContext()) { var produto = contexto.Produtos.Include(p => p.Compras).Where(p => p.Id == 1).FirstOrDefault(); contexto.Entry(produto).Collection(p => p.Compras).Query().Where(c => c.Quantidade > 5).Load(); Console.WriteLine($"Mostrando as compras do produto {produto.Nome}"); } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { LogSql(contexto); //Produtos da Promocao var promocao = contexto.Promocoes .Include(p => p.Produtos) .ThenInclude(pp => pp.Produto) .FirstOrDefault(); Console.WriteLine($"Produtos da promoção {promocao.Descricao}"); foreach (var item in promocao.Produtos) { Console.WriteLine(item.Produto); } //Endereço do Cliente var cliente = contexto.Clientes .Include(c => c.Endereco) .FirstOrDefault(); Console.WriteLine($"Endereço do cliente {cliente.Nome}:"); Console.WriteLine($"{cliente.Endereco.Rua}"); //Compras do Produto var produto = contexto.Produtos .Where(p => p.Id == 3002) .Include(p => p.Compras) .First(); Console.WriteLine($"Compras do produto {produto.Nome}"); foreach (var compra in produto.Compras) { Console.WriteLine($"{compra.Quantidade} {compra.Produto.Unidade} de {compra.Produto.Nome} no valor de {compra.Preco}"); } //Compras acima de 2 reais do Produto var p1 = contexto.Produtos .Where(p => p.Id == 3002) .FirstOrDefault(); contexto.Entry(p1) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 3.0) .Load(); Console.WriteLine($"Compras do produto {produto.Nome} com condicional"); foreach (var compra in p1.Compras) { Console.WriteLine($"{compra.Quantidade} {compra.Produto.Unidade} de {compra.Produto.Nome} no valor de {compra.Preco}"); } } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { //Acionando ao LOGGER !! SqlLoggerProvider.LogContext(contexto); var cliente = contexto .Clientes .Include(c => c.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"Endereco de Entrega: {cliente.EnderecoDeEntrega.Logradouro}"); ///////////////////////////////////////////// //Pegar as compras de um produto !! //var produto = contexto // .Produtos // .Where(p => p.Id == 3002) // .Include(p => p.Compras) // .FirstOrDefault(); //Console.WriteLine("## Pegar as compras de um produto !!"); //Console.WriteLine($"Mostrando as Compras do Produto: {produto.Nome}"); //foreach (var item in produto.Compras) //{ // Console.WriteLine("\t" + item); //} ///////////////////////////////////////////// //Pegar as compras acima de um valor para um produto !! var produto2 = contexto .Produtos .Where(p => p.Id == 3002) .FirstOrDefault(); contexto.Entry(produto2) .Collection(p => p.Compras) .Query() //tranforma em IQueryable !! .Where(c => c.Preco > 10) .Load(); Console.WriteLine("## Pegar as compras acima de um valor para um produto !!"); Console.WriteLine($"Mostrando as Compras do Produto: {produto2.Nome}"); foreach (var item in produto2.Compras) { Console.WriteLine("\t" + item); } } }
private static void TestandoEstadosDeObjetos() { using (var context = new LojaContext()) { //FOR BATCH OPERATIONS //context.ChangeTracker.AutoDetectChangesEnabled = false; //FOR UPDATE DATABASE MANUALLY //context.Database.Migrate(); var produtos = context.Produtos.ToList(); foreach (var p in produtos) { Console.WriteLine(p); } ListEntitiesState(context.ChangeTracker.Entries()); //var produto = context.Produtos.FirstOrDefault(); //produto.Nome = produto.Nome + " - Editado"; //ListEntitiesState(context.ChangeTracker.Entries()); var novoProduto = new Produto() { Nome = "Produto Teste", Categoria = "Teste", PrecoUnitario = 1.99 }; context.Produtos.Add(novoProduto); ListEntitiesState(context.ChangeTracker.Entries()); context.Produtos.Remove(novoProduto); ListEntitiesState(context.ChangeTracker.Entries()); var entry = context.Entry(novoProduto); Console.WriteLine("########################################"); Console.WriteLine($"{entry.Entity.ToString()} - {entry.State}"); Console.WriteLine("########################################"); context.SaveChanges(); ListEntitiesState(context.ChangeTracker.Entries()); } }
private static void VerificadorDeEstados(LojaContext contexto) { // desliga o monitoramento, melhora performance //contexto.ChangeTracker.AutoDetectChangesEnabled = false; // código para gerar log SQL GerarLog(contexto); // limpar e adicionar registros no repositório IniciarRegistros(); var produtos = contexto.Produtos.ToList(); ExibeEntries(contexto.ChangeTracker.Entries(), "UNCHANGED"); // estados: unchanged -> modified var p1 = produtos.First(); p1.Nome = "Into The Wild"; ExibeEntries(contexto.ChangeTracker.Entries(), "MODIFIED"); //estados: added var novoProduto = new Produto() { Nome = "Rocky Balboa", Categoria = "Filmes", PrecoUnitario = 25.99 }; contexto.Produtos.Add(novoProduto); ExibeEntries(contexto.ChangeTracker.Entries(), "ADDED"); //estado: detached contexto.Produtos.Remove(novoProduto); var entry = contexto.Entry(novoProduto); ExibeEntries(contexto.ChangeTracker.Entries(), "DETACHED"); //estados: deleted contexto.Produtos.Remove(contexto.Produtos.First()); ExibeEntries(contexto.ChangeTracker.Entries(), "DELETED"); contexto.SaveChanges(); ExibeEntries(contexto.ChangeTracker.Entries(), "UNCHANGED"); }
static void Main(string[] args) { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var compra = new Compra(); compra.Quantidade = 1000; compra.Produto = contexto.Produtos.Where(p => p.Id == 11).FirstOrDefault(); compra.Preco = compra.Quantidade * compra.Produto.PrecoUnitario; contexto.Compras.Add(compra); contexto.SaveChanges(); var cliente = contexto.Clientes.Include(c => c.EnderecoDeEntrega).FirstOrDefault(); Console.WriteLine(cliente.EnderecoDeEntrega.Logradouro); var produto = contexto .Produtos .Where(p => p.Id == 11) .FirstOrDefault(); //Construção de uma consulta, aplicando a condição num item de uma entidade secundaria contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 10) .Load(); foreach (var item in produto.Compras) { Console.WriteLine($"{item.Preco}, {item.Quantidade}"); } } Console.ReadLine(); }
private static void EstadosDoEntity() { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var produtos = contexto.Produtos.ToList(); ExibeEntries(contexto.ChangeTracker.Entries()); var p = new Produto() { Nome = "Lata", Categoria = "Alimentos", PrecoUnitario = 11.20 }; contexto.Add(p); p.Nome = "novo"; contexto.Remove(p); var entry = contexto.Entry(p); Console.WriteLine("\n\n " + entry.Entity.ToString() + " - " + entry.State); //var p = contexto.Produtos.First(); //contexto.Remove(p); //ExibeEntries(contexto.ChangeTracker.Entries()); //contexto.SaveChanges(); //ExibeEntries(contexto.ChangeTracker.Entries()); } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var cliente = contexto .Clientes .Include(c => c.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"endereco de entrega: {cliente.EnderecoDeEntrega.Logradouro}"); var produto = contexto .Produtos //.Include(p => p.Compras) .Where(p => p.Id == 9004) .FirstOrDefault(); contexto.Entry(produto) .Collection(p => p.Compras) .Query() //funciona todos metodos de extensao Iqueryable .Where(c => c.Preco > 10) .Load(); Console.WriteLine($"compras do produto {produto.Nome}"); foreach (var item in produto.Compras) { Console.WriteLine(item); } } Console.ReadKey(); }
static void Main(string[] args) { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var produtos = contexto.Produtos.ToList(); ExibirEntries(contexto.ChangeTracker.Entries()); var novoProduto = new Produto() { Nome = "sabão em pó", Categoria = "Limpeza", Preco = 5.00 }; contexto.Produtos.Add(novoProduto); ExibirEntries(contexto.ChangeTracker.Entries()); contexto.Produtos.Remove(novoProduto); ExibirEntries(contexto.ChangeTracker.Entries()); // contexto.SaveChanges(); var entry = contexto.Entry(novoProduto); Console.WriteLine("\n\n" + entry.Entity.ToString() + " - " + entry.State); ExibirEntries(contexto.ChangeTracker.Entries()); } Console.ReadLine(); }
private static void SelecionandoItemEmColecoesRelacionadas() { using (var contexto = new LojaContext()) { var loggerFactory = contexto.GetInfrastructure <IServiceProvider>().GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var produto = contexto .Produtos .Include(p => p.Compras) .FirstOrDefault(); contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.PrecoTotal > 10) .Load(); foreach (var item in produto.Compras) { Console.WriteLine(item); } } }
static void Main(string[] args) { using (var contexto2 = new LojaContext()) { var serviceProvider = contexto2.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); ///Esse .include() se chama "Carregamento Implícito" var cliente = contexto2 .Clientes .Include(x => x.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"Endereço de entrega: {cliente.EnderecoDeEntrega.Logradouro}"); var produto = contexto2 .Produtos .FirstOrDefault(x => x.Id == 8); ///Gerando uma pesquisa em que, o where está sendo feito sobre ///a entidade do join e não na principal ///Esse jeito se chama "Carregamento explícito" contexto2.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco > 10) .Load(); Console.WriteLine($"Mostrando as compras do produto {produto.Nome}"); foreach (var item in produto.Compras) { Console.WriteLine("\t" + item); } } }
static void Main(string[] args) { using (var contexto = new LojaContext()) { var serviceProvider = contexto.GetInfrastructure <IServiceProvider>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); loggerFactory.AddProvider(SqlLoggerProvider.Create()); var cliente = contexto.Clientes .Include(e => e.EnderecoDeEntrega) .FirstOrDefault(); Console.WriteLine($"Endereço de entrega: {cliente.EnderecoDeEntrega.Logradouro}"); var produto = contexto .Produtos //.Include(p => p.Compras) .Where(p => p.Id == 3002) .FirstOrDefault(); contexto.Entry(produto) .Collection(p => p.Compras) .Query() .Where(c => c.Preco <= 11).Load(); Console.WriteLine($"\n\tCompras do produto: {produto.Nome}\n"); foreach (var item in produto.Compras) { Console.WriteLine(item); } Console.WriteLine("============="); //var produtos = contexto.Compras // .Include(c => c.Produto) // .Where(p => p.Preco <= 10); //foreach (var item in produtos) //{ // Console.WriteLine(item.Produto); //} //var produtoCompra = contexto.Produtos.Where(p => p.Id == 3002).FirstOrDefault(); //contexto.Compras.Add(new Compra(25, produtoCompra)); //ExibeEntries(contexto.ChangeTracker.Entries()); //contexto.SaveChanges(); //ExibeEntries(contexto.ChangeTracker.Entries()); } Console.WriteLine("Done"); Console.ReadKey(); }