static void SqlInjection() { using var db = new Curso.Data.ApplicationContext(); db.Database.EnsureDeleted(); db.Database.EnsureCreated(); db.Departamentos.AddRange( new Curso.Domain.Departamento { Descricao = "Departamento 01" }, new Curso.Domain.Departamento { Descricao = "Departamento 02" }); db.SaveChanges(); //var descricao = "Teste ' or 1='1"; //db.Database.ExecuteSqlRaw("update departamentos set descricao='AtaqueSqlInjection' where descricao={0}",descricao); //db.Database.ExecuteSqlRaw($"update departamentos set descricao='AtaqueSqlInjection' where descricao='{descricao}'"); foreach (var departamento in db.Departamentos.AsNoTracking()) { Console.WriteLine($"Id: {departamento.Id}, Descricao: {departamento.Descricao}"); } }
static void CarregamentoExplicito() { using var db = new Curso.Data.ApplicationContext(); SetupTiposCarregamentos(db); var departamentos = db.Departamentos.ToList(); foreach (var departamento in departamentos) { if (departamento.Id == 2) { //db.Entry(departamento).Collection("Funcionarios").Load(); //db.Entry(departamento).Collection(p=>p.Funcionarios).Load(); db.Entry(departamento).Collection(p => p.Funcionarios).Query().Where(p => p.Id > 2).ToList(); } Console.WriteLine("---------------------------------------"); Console.WriteLine($"Departamento: {departamento.Descricao}"); if (departamento.Funcionarios?.Any() ?? false) { foreach (var funcionario in departamento.Funcionarios) { Console.WriteLine($"\tFuncionario: {funcionario.Nome}"); } } else { Console.WriteLine($"\tNenhum funcionario encontrado!"); } } }
static void ScriptGeralDoBancoDeDados() { using var db = new Curso.Data.ApplicationContext(); var script = db.Database.GenerateCreateScript(); Console.WriteLine(script); }
static void DriblandoSqlInjection() { using var db = new Curso.Data.ApplicationContext(); var descricao = "nova"; db.Database.ExecuteSqlRaw("UPDATE departamentos SET descricao='{0}' WHERE Id=1", descricao); }
//Neste tipo de carregamento, é recomendável utilizar para carregamento de poucos campos //pois o left join carrega a tabela toda de funcionarios, podendo acarretar lentidão static void CarregamentoAdiantado() { using var db = new Curso.Data.ApplicationContext(); SetupTiposCarregamentos(db); //Toda vez que for carregar departamento, será carregado também funcionários.Todos funcionários são carregados var departamentos = db.Departamentos .Include(p => p.Funcionarios); foreach (var departamento in departamentos) { Console.WriteLine("---------------------------------"); Console.WriteLine($"Departamento: {departamento.Descricao}"); if (departamento.Funcionarios?.Any() ?? false) { foreach (var funcionario in departamento.Funcionarios) { Console.WriteLine($"\tFuncionario: {funcionario.Nome}"); } } else { Console.WriteLine($"\tNenhum funcionario encontrado!"); } } }
static void CarregamentoLento() { using var db = new Curso.Data.ApplicationContext(); SetupTiposCarregamentos(db); //db.ChangeTracker.LazyLoadingEnabled = false; var departamentos = db .Departamentos .ToList(); foreach (var departamento in departamentos) { Console.WriteLine("---------------------------------------"); Console.WriteLine($"Departamento: {departamento.Descricao}"); if (departamento.Funcionarios?.Any() ?? false) { foreach (var funcionario in departamento.Funcionarios) { Console.WriteLine($"\tFuncionario: {funcionario.Nome}"); } } else { Console.WriteLine($"\tNenhum funcionario encontrado!"); } } }
static void DadosSensiveis() { using var db = new Curso.Data.ApplicationContext(); var descricao = "Departamento"; var departamentos = db.Departamentos.Where(p => p.Descricao == descricao).ToArray(); }
static void Esquema() { using var db = new Curso.Data.ApplicationContext(); var script = db.Database.GenerateCreateScript(); Console.WriteLine(script); }
//Resolve o problema de se usa mais de um contexto e força a criação da base static void GapDoEnsureCreatedComMultiplosContextos() { using var db1 = new Curso.Data.ApplicationContext(); using var db2 = new Curso.Data.ApplicatioContextCidade(); var databaseCreator = db2.GetService <IRelationalDatabaseCreator>(); databaseCreator.CreateTables(); }
static void PropagarDados() { using var db = new Curso.Data.ApplicationContext(); db.Database.EnsureDeleted(); db.Database.EnsureCreated(); var script = db.Database.GenerateCreateScript(); Console.WriteLine(script); }
static void GapDoEnsureCreated() { using var db1 = new Curso.Data.ApplicationContext(); //using var db2 = new Curso.Data.ApplicationContextCidade(); db1.Database.EnsureCreated(); //db2.Database.EnsureCreated(); //var databaseCreator = db2.GetService<IRelationalDatabaseCreator>(); //databaseCreator.CreateTables(); }
static void MigracoesJaAplicadas() { using var db = new Curso.Data.ApplicationContext(); var migracoes = db.Database.GetAppliedMigrations(); Console.WriteLine($"Total: {migracoes.Count()}"); foreach (var migracao in migracoes) { Console.WriteLine($"Migração: {migracao}"); } }
static void SqlInjection() { using var db = new Curso.Data.ApplicationContext(); EnsureDeleted(); EnsureDeleted(); var descricao = "Teste ' or 1='1"; db.Database.ExecuteSqlRaw($"UPDATE departamentos SET descricao='AtaqueInjection' WHERE descricao='{descricao}'"); foreach (var departamento in db.Departamentos.AsNoTracking()) { //Console.WriteLine($"id: {departamento.Id}, Descricao: {departamento.Name}"); } }
static void FiltroGlobal() { using var db = new Curso.Data.ApplicationContext(); Setup(db); var departamentos = db.Departamentos.Where(p => p.Id > 0).ToList(); foreach (var departamento in departamentos) { Console.ForegroundColor = ConsoleColor.Yellow; //Console.BackgroundColor = ConsoleColor.DarkBlue; Console.WriteLine($"Descrição: {departamento.Descricao} \t Excluido: {departamento.Excluido}"); } }
static void HealthCheckBancoDeDados() { using var db = new Curso.Data.ApplicationContext(); var canConnect = db.Database.CanConnect(); if (canConnect) { Console.WriteLine("Posso me conectar"); } else { Console.WriteLine("Não posso me conectar"); } }
static void HealthCheckBD() { using var db = new Curso.Data.ApplicationContext(); var canConnect = db.Database.CanConnect(); if (canConnect) { Console.WriteLine("Conexão Liberada"); } else { Console.WriteLine("Conexão não Liberada"); } }
static void CriarStoredProcedureDeConsulta() { var criarDepartamento = @" CREATE OR ALTER PROCEDURE GetDepartamentos @Descricao VARCHAR(50) AS BEGIN SELECT * FROM Departamentos WHERE Descricao LIKE @Descricao + '%' END "; using var db = new Curso.Data.ApplicationContext(); db.Database.ExecuteSqlRaw(criarDepartamento); }
static void ConsultaCoTag() { using var db = new Curso.Data.ApplicationContext(); Setup(db); var departamentos = db.Departamentos .TagWith("Estou enviando um comentário para o servidor") .ToList(); foreach (var departamento in departamentos) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"Descrição: {departamento.Descricao}"); } }
static void EntendendoConsulta_1ToN_Nto1() { using var db = new Curso.Data.ApplicationContext(); Setup(db); var funcionarios = db.Funcionarios .Include(p => p.Departamento) .ToList(); foreach (var funcionario in funcionarios) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"\t Nome: {funcionario.Nome} / Departamento: {funcionario.Departamento.Descricao}"); } }
static void HabilitandoBatchSize() { using var db = new Curso.Data.ApplicationContext(); db.Database.EnsureDeleted(); db.Database.EnsureCreated(); for (int i = 0; i < 50; i++) { db.Departamentos.Add(new Departamento { Descricao = $"Departamento {i}" }); } db.SaveChanges(); }
static void ConsultaInterpolada() { using var db = new Curso.Data.ApplicationContext(); Setup(db); var id = 1; var departamentos = db.Departamentos .FromSqlInterpolated($"SELECT * FROM Departamentos WITH(NOLOCK) WHERE Id>{id}") .ToList(); foreach (var departamento in departamentos) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"Descrição: {departamento.Descricao}"); } }
static void ConsultaParametrizada() { using var db = new Curso.Data.ApplicationContext(); Setup(db); var id = 0; var departamentos = db.Departamentos .FromSqlRaw("SELECT * FROM Departamentos WITH(NOLOCK) WHERE Id > {0}", id) .Where(p => !p.Excluido) .ToList(); foreach (var departamento in departamentos) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"Descrição: {departamento.Descricao}"); } }
static void ExecutarEstrategiaResiliencia() { using var db = new Curso.Data.ApplicationContext(); var strategy = db.Database.CreateExecutionStrategy(); strategy.Execute(() => { using var transaction = db.Database.BeginTransaction(); db.Departamentos.Add(new Departamento { Descricao = "Transacao" }); db.SaveChanges(); transaction.Commit(); }); }
static void ExecuteSql() { //Primeira opçao using var db = new Curso.Data.ApplicationContext(); using (var cmd = db.Database.GetDbConnection().CreateCommand()){ cmd.CommandText = "SELECT 1"; cmd.ExecuteNonQuery(); } //Segunda opção var descricao = "TESTE"; db.Database.ExecuteSqlRaw("UPDATE departamentos SET descricao={0} WHERE ID=1", descricao); //Terceira Opçao db.Database.ExecuteSqlInterpolated($"UPDATE departamentos SET descricao={descricao} WHERE ID=1"); }
static void Setup(Curso.Data.ApplicationContext db) { if (db.Database.EnsureCreated()) { db.Departamentos.AddRange( new Curso.Domain.Departamento { Ativo = true, Descricao = "Departamento 01", Funcionarios = new System.Collections.Generic.List <Curso.Domain.Funcionario> { new Curso.Domain.Funcionario { Nome = "Icaro Henrique", CPF = "99999999911", RG = "2100062" } }, Excluido = true }, new Curso.Domain.Departamento { Ativo = true, Descricao = "Departamento 02", Funcionarios = new System.Collections.Generic.List <Curso.Domain.Funcionario> { new Curso.Domain.Funcionario { Nome = "Patrizia Mastrodonato", CPF = "88888888811", RG = "3100062" }, new Curso.Domain.Funcionario { Nome = "Bruce Wayne", CPF = "77777777711", RG = "1100062" } } }); db.SaveChanges(); db.ChangeTracker.Clear(); } }
static void ConsultaViaProcedure() { using var db = new Curso.Data.ApplicationContext(); var dep = "Departamento"; var departamentos = db.Departamentos //.FromSqlRaw("execute GetDepartamentos @p0", "Departamento") .FromSqlInterpolated($"execute GetDepartamentos {dep}") .ToList(); foreach (var departamento in departamentos) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"Descrição: {departamento.Descricao}"); } }
static void ConversorCustomizado() { using var db = new Curso.Data.ApplicationContext(); db.Database.EnsureDeleted(); db.Database.EnsureCreated(); db.Conversores.Add( new Conversor { Status = Status.Devolvido, } ); db.SaveChanges(); var conversorEmAnalise = db.Conversores.AsNoTracking().FirstOrDefault(p => p.Status == Status.Analise); var conversorDevolvido = db.Conversores.AsNoTracking().FirstOrDefault(p => p.Status == Status.Devolvido); }
static void CriarStoredProcedure() { var criarDepartamento = @" CREATE OR ALTER PROCEDURE CriarDepartamento @Descricao VARCHAR(50), @Ativo BIT AS BEGIN INSERT INTO Departamentos(Descricao, Ativo, Excluido) VALUES (@Descricao, @Ativo, 0) END "; using var db = new Curso.Data.ApplicationContext(); db.Database.ExecuteSqlRaw(criarDepartamento); }
static void CarregamentoExplicito() { using var db = new Curso.Data.ApplicationContext(); SetupTiposCarregamentos(db); //Toda vez que for carregar departamento, será carregado também funcionários.Todos funcionários são carregados var departamentos = db.Departamentos.ToList(); foreach (var departamento in departamentos) { Console.WriteLine("---------------------------------"); Console.WriteLine($"Departamento: {departamento.Descricao}"); if (departamento.Id == 2) { db.Entry(departamento).Collection(p => p.Funcionarios).Query().Where(p => p.Id > 2).ToList(); } } }
static void ExecuteSQL() { using var db = new Curso.Data.ApplicationContext(); // Primeira Opcao using (var cmd = db.Database.GetDbConnection().CreateCommand()) { cmd.CommandText = "SELECT 1"; cmd.ExecuteNonQuery(); } // Segunda Opcao var descricao = "TESTE"; db.Database.ExecuteSqlRaw("update departamentos set descricao={0} where id=1", descricao); //Terceira Opcao db.Database.ExecuteSqlInterpolated($"update departamentos set descricao={descricao} where id=1"); }