Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
DbContext.SaveChanges() är en av två metoder för att spara ändringar i databasen med EF. Med den här metoden utför du en eller flera spårade ändringar (lägg till, uppdatera, ta bort) och tillämpa ändringarna genom att anropa SaveChanges metoden. Som ett alternativ ExecuteUpdate och ExecuteDelete kan användas utan ändringsspåraren. En introduktionsjämförelse av dessa två tekniker finns på sidan Översikt om hur du sparar data.
Tips/Råd
Du kan visa den här artikelns exempel på GitHub.
Lägga till data
Använd metoden DbSet<TEntity>.Add för att lägga till nya instanser av dina entitetsklasser. Data infogas i databasen när du anropar DbContext.SaveChanges():
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Tips/Råd
Metoderna Add, Attachoch Update fungerar alla i det fullständiga diagrammet över entiteter som skickas till dem, enligt beskrivningen i avsnittet Relaterade data . Alternativt kan egenskapen EntityEntry.State användas för att ange tillståndet för bara en enda entitet. Till exempel context.Entry(blog).State = EntityState.Modified.
Uppdatera data
EF identifierar automatiskt ändringar som gjorts i en befintlig entitet som spåras av kontexten. Detta omfattar entiteter som du läser in/frågar från databasen och entiteter som tidigare har lagts till och sparats i databasen.
Ändra bara de värden som tilldelats egenskaper och anropa SaveChangessedan :
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();
}
Ta bort data
Använd metoden DbSet<TEntity>.Remove för att ta bort instanser av dina entitetsklasser:
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();
}
Om entiteten redan finns i databasen tas den bort under SaveChanges. Om entiteten ännu inte har sparats i databasen (dvs. spåras som den har lagts till) tas den bort från kontexten och infogas inte längre när SaveChanges anropas.
Flera operationer i en enda "SaveChanges"
Du kan kombinera flera åtgärder för att lägga till/uppdatera/ta bort till ett enda anrop till 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();
}
Anmärkning
För de flesta databasprovidrar SaveChanges är transaktionell. Det innebär att alla åtgärder antingen lyckas eller misslyckas och att åtgärderna aldrig lämnas delvis tillämpade.