Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
DbContext.SaveChanges() is een van de twee technieken voor het opslaan van wijzigingen in de database met EF. Met deze methode voert u een of meer bijgehouden wijzigingen uit (toevoegen, bijwerken, verwijderen) en past u deze wijzigingen vervolgens toe door de methode aan te SaveChanges roepen. Als alternatief ExecuteUpdate en ExecuteDelete kan worden gebruikt zonder de wijzigingstracker te betrekken. Zie de overzichtspagina over het opslaan van gegevens voor een inleidende vergelijking van deze twee technieken.
Aanbeveling
U kunt het voorbeeld van dit artikel bekijken op GitHub.
Gegevens toevoegen
Gebruik de DbSet<TEntity>.Add methode om nieuwe exemplaren van uw entiteitsklassen toe te voegen. De gegevens worden in de database ingevoegd wanneer u het volgende aanroept DbContext.SaveChanges():
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Aanbeveling
De Add, Attachen Update methoden werken allemaal aan de volledige grafiek van entiteiten die eraan worden doorgegeven, zoals beschreven in de sectie Gerelateerde gegevens . U kunt ook de eigenschap EntityEntry.State gebruiken om de status van slechts één entiteit in te stellen. Bijvoorbeeld: context.Entry(blog).State = EntityState.Modified.
Gegevens bijwerken
EF detecteert automatisch wijzigingen die zijn aangebracht in een bestaande entiteit die wordt bijgehouden door de context. Dit omvat entiteiten die u laadt/opvraagt uit de database en entiteiten die eerder zijn toegevoegd en opgeslagen in de database.
Wijzig de waarden die aan eigenschappen zijn toegewezen en roep SaveChangesvervolgens het volgende aan:
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();
}
Gegevens verwijderen
Gebruik de DbSet<TEntity>.Remove methode om exemplaren van uw entiteitsklassen te verwijderen:
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();
}
Als de entiteit al in de database bestaat, wordt deze verwijderd tijdens SaveChanges. Als de entiteit nog niet is opgeslagen in de database (dat wil gezegd, wordt deze bijgehouden als toegevoegd), wordt deze verwijderd uit de context en wordt deze niet meer ingevoegd wanneer SaveChanges deze wordt aangeroepen.
Meerdere bewerkingen in één SaveChanges
U kunt meerdere bewerkingen voor toevoegen/bijwerken/verwijderen combineren tot één aanroep naar 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();
}
Opmerking
SaveChanges is transactioneel voor de meeste databaseproviders. Dit betekent dat alle bewerkingen slagen of mislukken en dat de bewerkingen nooit gedeeltelijk worden toegepast.