Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
DbContext.SaveChanges() adalah salah satu dari dua teknik untuk menyimpan perubahan pada database dengan EF. Dengan metode ini, Anda melakukan satu atau beberapa perubahan terlacak (menambahkan, memperbarui, menghapus), lalu menerapkan perubahan tersebut SaveChanges dengan memanggil metode . Sebagai alternatif, ExecuteUpdate dan ExecuteDelete dapat digunakan tanpa melibatkan pelacak perubahan. Untuk perbandingan pengantar kedua teknik ini, lihat halaman Gambaran Umum tentang menyimpan data.
Petunjuk / Saran
Anda dapat melihat contoh artikel ini di GitHub.
Menambahkan Data
Gunakan metode DbSet<TEntity>.Add untuk menambahkan instance baru dari kelas entitas Anda. Data akan disisipkan ke dalam database saat Anda memanggil DbContext.SaveChanges():
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
}
Petunjuk / Saran
Metode Add, Attach, dan Update semuanya bekerja pada grafik lengkap entitas yang diteruskan kepada mereka, seperti yang dijelaskan di bagian Data Terkait . Secara bergantian, properti EntityEntry.State dapat digunakan untuk mengatur status hanya satu entitas. Contohnya, context.Entry(blog).State = EntityState.Modified.
Memperbarui Data
EF secara otomatis mendeteksi perubahan yang dilakukan pada entitas yang ada yang dilacak oleh konteks. Ini termasuk entitas yang Anda muat/kueri dari database, dan entitas yang sebelumnya ditambahkan dan disimpan ke database.
Cukup ubah nilai yang ditetapkan ke properti lalu panggil 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();
}
Menghapus Data
DbSet<TEntity>.Remove Gunakan metode untuk menghapus instans kelas entitas Anda:
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();
}
Jika entitas sudah ada dalam database, entitas akan dihapus selama SaveChanges. Jika entitas belum disimpan ke database (artinya, entitas tersebut dilacak sebagai ditambahkan) maka entitas tersebut akan dihapus dari konteks dan tidak akan lagi dimasukkan ketika SaveChanges dipanggil.
Beberapa Operasi dalam satu SaveChanges
Anda dapat menggabungkan beberapa operasi Tambahkan/Perbarui/Hapus ke dalam satu panggilan ke 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();
}
Nota
Untuk sebagian besar penyedia database, SaveChanges bersifat transaksi. Ini berarti semua operasi berhasil atau gagal dan operasi tidak pernah dibiarkan diterapkan sebagian.