Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
DbContext.SaveChanges() é uma das duas técnicas para salvar alterações no banco de dados com EF. Com esse método, você executa uma ou mais alterações controladas (adicionar, atualizar, excluir) e, em seguida, aplicar essas alterações chamando o SaveChanges método. Como alternativa, ExecuteUpdate e ExecuteDelete pode ser usado sem envolver o rastreador de alterações. Para obter uma comparação introdutória dessas duas técnicas, consulte a página de Visão geral sobre como salvar dados.
Dica
Você pode exibir o exemplo deste artigo no GitHub.
Adicionando dados
Use o DbSet<TEntity>.Add método para adicionar novas instâncias de suas classes de entidade. Os dados serão inseridos no banco de dados quando você chamar DbContext.SaveChanges():
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Dica
Os métodos Add, Attach e Update todos funcionam no grafo completo de entidades passadas para eles, conforme descrito na seção Dados Relacionados. Como alternativa, a propriedade EntityEntry.State pode ser usada para definir o estado de apenas uma única entidade. Por exemplo, context.Entry(blog).State = EntityState.Modified.
Atualizando dados
O EF detecta automaticamente as alterações feitas em uma entidade existente que é controlada pelo contexto. Isso inclui entidades que você carrega/consulta do banco de dados e entidades que foram adicionadas e salvas anteriormente no banco de dados.
Basta modificar os valores atribuídos às propriedades e, em seguida, chamar SaveChanges:
using (var context = new BloggingContext())
{
var blog = await context.Blogs.SingleAsync(b => b.Url == "http://example.com");
blog.Url = "http://example.com/blog";
await context.SaveChangesAsync();
}
Excluindo dados
Use o DbSet<TEntity>.Remove método para excluir instâncias de suas classes de entidade:
using (var context = new BloggingContext())
{
var blog = await context.Blogs.SingleAsync(b => b.Url == "http://example.com/blog");
context.Blogs.Remove(blog);
await context.SaveChangesAsync();
}
Se a entidade já existir no banco de dados, ela será excluída durante SaveChanges. Se a entidade ainda não tiver sido salva no banco de dados (isto é, estiver marcada como adicionada), ela será removida do contexto e não será inserida quando SaveChanges for chamado.
Várias operações em um único SaveChanges
Você pode combinar várias operações Adicionar/Atualizar/Remover em uma única chamada para SaveChanges:
using (var context = new BloggingContext())
{
// seeding database
context.Blogs.Add(new Blog { Url = "http://example.com/blog" });
context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" });
await context.SaveChangesAsync();
}
using (var context = new BloggingContext())
{
// add
context.Blogs.Add(new Blog { Url = "http://example.com/blog_one" });
context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" });
// update
var firstBlog = await context.Blogs.FirstAsync();
firstBlog.Url = "";
// remove
var lastBlog = await context.Blogs.OrderBy(e => e.BlogId).LastAsync();
context.Blogs.Remove(lastBlog);
await context.SaveChangesAsync();
}
Observação
Para a maioria dos provedores de banco de dados, SaveChanges é transacional. Isso significa que todas as operações são bem-sucedidas ou falham e as operações nunca são deixadas parcialmente aplicadas.