Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
DbContext.SaveChanges() je jednou ze dvou technik pro ukládání změn do databáze pomocí EF. Pomocí této metody provedete jednu nebo více sledovaných změn (přidání, aktualizace, odstranění) a následné použití těchto změn voláním SaveChanges metody. Jako alternativu lze použít ExecuteUpdate a ExecuteDelete bez zásahu sledování změn. Úvodní porovnání těchto dvou technik najdete na stránce Přehled při ukládání dat.
Návod
Ukázku pro tento článek najdete na GitHubu.
Přidání dat
Použijte metodu DbSet<TEntity>.Add pro přidání nových instancí tříd entit. Data se při volání DbContext.SaveChanges()vloží do databáze:
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Návod
Všechny Addmetody a Attach , Updatepracují na úplném grafu entit předaných jim, jak je popsáno v části Související data. Alternativně lze vlastnost EntityEntry.State použít k nastavení stavu pouze jedné entity. Například: context.Entry(blog).State = EntityState.Modified.
Aktualizace dat
EF automaticky rozpozná změny provedené u existující entity, která je sledována kontextem. To zahrnuje entity, které načítáte nebo dotazujete z databáze, a entity, které byly dříve přidány a uloženy do databáze.
Jednoduše upravte hodnoty přiřazené vlastnostem a pak volejte 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();
}
Odstranění dat
DbSet<TEntity>.Remove Pomocí metody odstraňte instance tříd entit:
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();
}
Pokud entita již v databázi existuje, bude odstraněna během SaveChanges. Pokud entita ještě nebyla uložena do databáze (to znamená, že se sleduje jako přidaná), odebere se z kontextu a po zavolání se už nevloží SaveChanges .
Více operací v jedné operaci SaveChanges
Do jednoho volání SaveChangesmůžete zkombinovat více operací Přidat, Aktualizovat nebo Odebrat:
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();
}
Poznámka:
U většiny poskytovatelů databáze SaveChanges je transakční. To znamená, že všechny operace buď uspějí, nebo selžou a nikdy nezůstanou nesplněné jen z části.