Usuário com melhor resposta
EF - Salvar alterações no contexto sem salvar no banco.

Pergunta
-
Gostaria de saber se é possivel manipular as entidades no meu contexto e salvar as mudanças sem alterar o banco de dados.
Tenho mais ou menos o seguinte código:
DbTeste db = new DbTeste();
var pessoa = (from p in db.PESSOAS where p.SITUACAO == "A" selecet p).SingleOrDefault();
pessoa.SITUACAO = "B";
Até aqui eu não desejo chamar SaveChanges() para modificar o banco.
Logo em seguinda quando eu executo a seguinte query:
var pessoa2 = (from p in db.PESSOAS where p.SITUACAO == "B" selecet p).SingleOrDefault();
E a minha variavel pessoa 2 fica nula, como se eu não tivesse mudado o valor.
Respostas
-
Olá Rogério. Obirgado pela dica, mas acabei resolvendo de uma forma diferente.
Logo depois de criar meu contexto eu instancei um objeto do tipo DbTransaction da seguinte forma:
DbTeste db = new DbTeste();
db.Connection.Open();
DbTransaction transaction = db.Connection.BeginTransaction();
Assim eu pude chamar o médodo SaveChanges e as mudanças não foram aplicadas ao banco.
var pessoa = (from p in db.PESSOAS where p.SITUACAO == "A" selecet p).SingleOrDefault();
pessoa.SITUACAO = "B";
db.SaveChanges();
Pra aplicar as mudanças ao banco foi necessário apenas usar o método Commit da transação.
transaction.Commit();
- Marcado como Resposta AndreAlvesLimaModerator quarta-feira, 18 de maio de 2011 12:13
Todas as Respostas
-
Rafael,
Como as alterações que você fez no primeiro from ainda não foram salvas no banco, quando você faz a segunda query os dados são buscados da base novamente sem ler as alterações que ainda não foram salvas.
Você pode fazer uma implementação para resolver isto usando tipo um cache, veja este artigo:
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 17 de maio de 2011 19:01
-
Olá Rogério. Obirgado pela dica, mas acabei resolvendo de uma forma diferente.
Logo depois de criar meu contexto eu instancei um objeto do tipo DbTransaction da seguinte forma:
DbTeste db = new DbTeste();
db.Connection.Open();
DbTransaction transaction = db.Connection.BeginTransaction();
Assim eu pude chamar o médodo SaveChanges e as mudanças não foram aplicadas ao banco.
var pessoa = (from p in db.PESSOAS where p.SITUACAO == "A" selecet p).SingleOrDefault();
pessoa.SITUACAO = "B";
db.SaveChanges();
Pra aplicar as mudanças ao banco foi necessário apenas usar o método Commit da transação.
transaction.Commit();
- Marcado como Resposta AndreAlvesLimaModerator quarta-feira, 18 de maio de 2011 12:13