Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Método SaveChanges()

Não coloquei o método savechanges, mesmo assim persistiu no banco de dados. Por que isso aconteceu ? é implícito ?

1 resposta
solução!

Olá Jose,

mesmo se você não chamar o SaveChanges(), o Entity acaba persistindo no banco as entidades no final da execução. Mas tem uma diferença de comportamento interno entre chamar ou não o SaveChanges, que é o que conhecemos por conrole de transação. Vamos supor que você tem o seguinte código:

static void Main(string[] args)
{
    EntidadesContext contexto = new EntidadesContext();

    Usuario renan = new Usuario()
    {
          Nome = "Renan",
          Senha = "123"
    };
    contexto.Usuarios.Add(renan);
    contexto.SaveChanges();

    Usuario jose = new Usuario()
    {
          Nome = "Jose",
          Senha = "345"
    };
    contexto.Usuarios.Add(jose);
    contexto.SaveChanges();

    context.Dispose();
}

Quando chamamos o método contexto.Usuarios.Add(renan), ele ainda não foi enviado para o banco. O Entity apenas guardou esta entidade dentro do seu contexto na lista de ações pendentes que ele precisa fazer. Dando o SaveChanges ele olha todas as alterações pendentes a serem feitas no banco de dados, como cadastrar o renan, e as executa no banco.

Da mesma forma, quando ele faz contexto.Usuarios.Add(jose) agora o jose fica nas pendências que ele precisa resolver no banco e após o SaveChanges o jose é persistido.

Porém vamos supor que na hora de fazer um SaveChanges do jose ocorra algum problema/exception. Por dar um erro, Entity fará o processo conhecido por rollback, ou seja, ele volta o banco para o último estado estável. No caso o estado anterior estável que ele tinha antes era com o renan cadastrado no banco. Então apenas o jose não será cadastrado no banco.

Agora se você fizer este código:

static void Main(string[] args)
{
    EntidadesContext contexto = new EntidadesContext();

    Usuario renan = new Usuario()
    {
          Nome = "Renan",
          Senha = "123"
    };
    contexto.Usuarios.Add(renan);

    Usuario jose = new Usuario()
    {
          Nome = "Jose",
          Senha = "345"
    };
    contexto.Usuarios.Add(jose);

    context.Dispose();
}

Tanto o renan quanto o jose ficarão pendentes de serem salvos no banco. Apenas quando o contexto estiver sendo fechado que o Entity resolverá estas dependências. Só que agora, se ocorrer alguma exception durante o processo, o rollback excluirá tanto o renan quanto o jose.