Sdílet prostřednictvím


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 Addmetody a Update , Attachpracují 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í 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" });
    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ě.