Bagikan melalui


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.