static void Main(string[] args) { EntityConnection cn = new EntityConnection("name=ASIEntities7"); DbConnection dbcn = new SqlConnection( System.Configuration.ConfigurationManager.ConnectionStrings["base dados"].ConnectionString ); var alnPedro = new Aluno { NumAl = 1001, Nome = "Pedro" }; alnPedro.AlunosAssEsts = new HashSet<AlunosAssEst>(); var alnPaula = new Aluno { NumAl = 1002, Nome = "Paula" }; alnPaula.AlunosAssEsts = new HashSet<AlunosAssEst>(); using (var ctx1 = new ASIEntities7(cn)) { // em alternativa a usar o Sql Server Profiler, pode fazer: //ctx1.Database.Log = Console.Write; ctx1.Alunos.Add(alnPedro); ctx1.Alunos.Add(alnPaula); // ExecuteDML(dbcn, "A trocar as voltas ao EF6 inserindo o Jose ADO.Net(1001)...", "INSERT INTO [BD3_1].[dbo].[Alunos] ([NumAl],[Nome]) VALUES (1001, 'Jose ADO.Net')"); SaveContextChanges(ctx1, PoliticaConcorrencia.UsarInfoBD); } using (var ctxPessimista = new ASIEntities7(cn)) { // em alternativa a usar o Sql Server Profiler, pode fazer: //ctx4.Database.Log = Console.Write; Aluno alnPedroCtx = (from a in ctxPessimista.Alunos where a.NumAl == 1001 select a).First(); alnPedroCtx.Nome = "Pedro ContextoEF6"; ExecuteDML(dbcn, "O ADO.Net vai mudar o nome do Pedro para 'Pedro ADO.Net'.", "UPDATE [BD3_1].[dbo].[Alunos] SET [Nome] = 'Pedro ADO.Net' WHERE [NumAl] = 1001"); Console.WriteLine("O EF6 vai mudar o nome do Pedro para 'Pedro ContextoEF6'. Antes de gravar, alnPedroCtx.Nome = {0}", alnPedroCtx.Nome); SaveContextChanges(ctxPessimista, PoliticaConcorrencia.UsarInfoBD); Console.WriteLine("Depois de gravadas as alteracoes com uma politica pessimista (vale o que esta na BD), o nome do Pedro no ambito do contexto EF6 é: alnPedroCtx.Nome = {0})", alnPedroCtx.Nome); } Console.WriteLine(); using (var ctxOptimista = new ASIEntities7(cn)) { // em alternativa a usar o Sql Server Profiler, pode fazer: //ctx5.Database.Log = Console.Write; Aluno alnPedroCtx = (from a in ctxOptimista.Alunos where a.NumAl == 1001 select a).First(); alnPedroCtx.Nome = "Pedro ContextoEF6"; ExecuteDML(dbcn, "O ADO.Net vai mudar o nome do Pedro para 'Pedro ADO.Net Outra Vez'.", "UPDATE [BD3_1].[dbo].[Alunos] SET [Nome] = 'Pedro ADO.Net Outra Vez' WHERE [NumAl] = 1001"); Console.WriteLine("O EF6 vai mudar o nome do Pedro para 'Pedro ContextoEF6'. Antes de gravar, alnPedroCtx.Nome = {0}", alnPedroCtx.Nome); SaveContextChanges(ctxOptimista, PoliticaConcorrencia.UsarInfoCtx); Console.WriteLine("Depois de gravadas as alteracoes com uma politica optimista (vale o que esta no Contexto), o nome do Pedro no ambito do contexto EF6 é: alnPedroCtx.Nome = {0})", alnPedroCtx.Nome); } Console.WriteLine("Press any key to exit..."); Console.ReadLine(); }
static void Main(string[] args) { EntityConnection cn = new EntityConnection("name=ASIEntities7"); var alnPedro = new Aluno { NumAl = 1001, Nome = "Pedro" }; alnPedro.AlunosAssEsts = new HashSet<AlunosAssEst>(); var alnPaula = new Aluno { NumAl = 1002, Nome = "Paula" }; alnPaula.AlunosAssEsts = new HashSet<AlunosAssEst>(); using (var ctx1 = new ASIEntities7(cn)) { // em alternativa a usar o Sql Server Profiler, pode fazer: ctx1.Database.Log = Console.Write; //ctx.Database.Connection.Open(); //ctx.Configuration.AutoDetectChangesEnabled = false; ctx1.Alunos.Add(alnPedro); ctx1.Alunos.Add(alnPaula); //ctx.ChangeTracker.DetectChanges(); ctx1.SaveChanges(); } using (var ctx2 = new ASIEntities7(cn)) { // em alternativa a usar o Sql Server Profiler, pode fazer: ctx2.Database.Log = Console.Write; //ctx2.Configuration.AutoDetectChangesEnabled = false; var i1 = new AlunosAssEst { NumAl = 1002, Interesse = "i1" }; var i2 = new AlunosAssEst { NumAl = 1002, Interesse = "i2" }; alnPaula.AlunosAssEsts.Add(i1); alnPaula.AlunosAssEsts.Add(i2); ctx2.AlunosAssEsts.Add(i1); ctx2.AlunosAssEsts.Add(i2); //ctx2.ChangeTracker.DetectChanges(); ctx2.SaveChanges(); } using (var ctx3 = new ASIEntities7(cn)) { // em alternativa a usar o Sql Server Profiler, pode fazer: ctx3.Database.Log = Console.Write; //ctx3.Configuration.AutoDetectChangesEnabled = false; ctx3.Alunos.Attach(alnPaula); //TODO: System.InvalidOperationException {"The object cannot be deleted because it was not found in the ObjectStateManager."} ctx3.Alunos.Remove(alnPaula); ctx3.SaveChanges(); } Console.WriteLine("Press any key to exit..."); Console.ReadLine(); }