Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
DbContext.SaveChanges() az adatbázis módosításainak EF-vel történő mentésére szolgáló két módszer egyike. Ezzel a módszerrel egy vagy több korrektúrát hajt végre (hozzáadás, frissítés, törlés), majd alkalmazza ezeket a módosításokat a SaveChanges metódus meghívásával. Alternatív ExecuteUpdate megoldásként, és ExecuteDelete a változáskövető bevonása nélkül is használható. A két módszer bevezető összehasonlítása az adatok mentésének Áttekintés lapján található.
Jótanács
A cikk mintáját a GitHubon tekintheti meg.
Adatok hozzáadása
DbSet<TEntity>.Add A metódussal új példányokat adhat hozzá az entitásosztályokhoz. Az adatok a következő híváskor DbContext.SaveChanges()lesznek beszúrva az adatbázisba:
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Jótanács
A Add, Attachés Update metódusok mind a nekik átadott entitások teljes gráfján működnek, a Kapcsolódó adatok szakaszban leírtak szerint. Másik lehetőségként az EntityEntry.State tulajdonság használható egyetlen entitás állapotának beállítására. Például: context.Entry(blog).State = EntityState.Modified.
Adatok frissítése
Az EF automatikusan észleli a környezet által nyomon követett meglévő entitás módosításait. Ide tartoznak az adatbázisból betöltendő/lekérdezett entitások, valamint az adatbázisba korábban felvett és mentett entitások.
Egyszerűen módosítsa a tulajdonságokhoz rendelt értékeket, majd hívja meg a következőt 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();
}
Adatok törlése
A metódussal DbSet<TEntity>.Remove törölheti az entitásosztályok példányait:
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();
}
Ha az entitás már létezik az adatbázisban, akkor a folyamat során törölni fogják. Ha az entitást még nem mentették az adatbázisba (azaz hozzáadásként van nyomon követve), akkor eltávolítják a környezetből, és nem lesz többé beszúrva, amikor a SaveChanges meghívásra kerül.
Több művelet egyetlen SaveChanges-fájlban
Több hozzáadási/frissítési/eltávolítási műveletet egyesíthet egyetlen hívással: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();
}
Megjegyzés:
A legtöbb adatbázis-szolgáltató esetében a SaveChanges tranzakcióalag viselkedik. Ez azt jelenti, hogy az összes művelet sikeres vagy sikertelen, és a műveletek nem lesznek részlegesen alkalmazva.