Sdílet prostřednictvím


Základní uložit změny

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.