SaveChanges Dasar
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.
Tip
Anda dapat melihat contoh artikel ini di GitHub.
Menambahkan Data
DbSet<TEntity>.Add Gunakan metode untuk menambahkan instans baru 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);
context.SaveChanges();
}
Tip
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 = context.Blogs.Single(b => b.Url == "http://example.com");
blog.Url = "http://example.com/blog";
context.SaveChanges();
}
Menghapus data
DbSet<TEntity>.Remove Gunakan metode untuk menghapus instans kelas entitas Anda:
using (var context = new BloggingContext())
{
var blog = context.Blogs.Single(b => b.Url == "http://example.com/blog");
context.Blogs.Remove(blog);
context.SaveChanges();
}
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" });
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();
}
Catatan
Untuk sebagian besar penyedia database, SaveChanges
bersifat transaksi. Ini berarti semua operasi berhasil atau gagal dan operasi tidak pernah dibiarkan diterapkan sebagian.