Základní saveChanges
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 ExecuteUpdate lze ExecuteDelete použít 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.
Tip
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);
context.SaveChanges();
}
Tip
Všechny Add
metody a Update
, Attach
pracují 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 = context.Blogs.Single(b => b.Url == "http://example.com");
blog.Url = "http://example.com/blog";
context.SaveChanges();
}
Odstranění dat
DbSet<TEntity>.Remove Pomocí metody odstraňte instance tříd entit:
using (var context = new BloggingContext())
{
var blog = context.Blogs.Single(b => b.Url == "http://example.com/blog");
context.Blogs.Remove(blog);
context.SaveChanges();
}
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í SaveChanges
můž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" });
context.SaveChanges();
}
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 = context.Blogs.First();
firstBlog.Url = "";
// remove
var lastBlog = context.Blogs.OrderBy(e => e.BlogId).Last();
context.Blogs.Remove(lastBlog);
context.SaveChanges();
}
Poznámka
U většiny poskytovatelů SaveChanges
databáze je transakční. To znamená, že všechny operace jsou úspěšné nebo neúspěšné a operace se nikdy nezachovají částečně.