Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
DbContext.SaveChanges() é uma das duas técnicas para salvar alterações no banco de dados com o 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 mudanças. Para obter uma comparação introdutória dessas duas técnicas, consulte a página Visão geral sobre como salvar dados.
Sugestão
Você pode visualizar a amostra do 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 na base de dados quando ligar para DbContext.SaveChanges():
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Sugestão
Todos os métodos Add, Attach e Update funcionam no grafo completo das 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.
Atualização de dados
O EF deteta 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();
}
Apagando 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 na base de dados, será eliminada durante SaveChanges. Se a entidade ainda não tiver sido salva no banco de dados (ou seja, for rastreada como adicionada), ela será removida do contexto e não será mais inserida quando SaveChanges for chamada.
Várias operações num único SaveChanges
Você pode combinar várias operações de 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 têm sucesso ou falham, e as operações nunca são aplicadas parcialmente.