Temel SaveChanges

DbContext.SaveChanges() , EF ile veritabanında yapılan değişiklikleri kaydetmeye yönelik iki teknikten biridir. Bu yöntemle, bir veya daha fazla izlenen değişiklik (ekleme, güncelleştirme, silme) gerçekleştirir ve ardından yöntemini çağırarak SaveChanges bu değişiklikleri uygularsınız. Alternatif ExecuteUpdate olarak ve ExecuteDelete değişiklik izleyicisi dahil olmadan kullanılabilir. Bu iki tekniğin giriş niteliğindeki karşılaştırması için veri kaydetmeye ilişkin Genel Bakış sayfasına bakın.

Bahşiş

Bu makalenin örneğini GitHub'da görüntüleyebilirsiniz.

Veri Ekleme

DbSet<TEntity>.Add Varlık sınıflarınızın yeni örneklerini eklemek için yöntemini kullanın. çağrısı yaptığınızda DbContext.SaveChanges()veriler veritabanına eklenir:

using (var context = new BloggingContext())
{
    var blog = new Blog { Url = "http://example.com" };
    context.Blogs.Add(blog);
    context.SaveChanges();
}

Bahşiş

Add, Attachve Update yöntemlerinin tümü, İlgili Veriler bölümünde açıklandığı gibi, kendilerine geçirilen varlıkların tam grafiği üzerinde çalışır. Alternatif olarak, EntityEntry.State özelliği yalnızca tek bir varlığın durumunu ayarlamak için kullanılabilir. Örneğin, context.Entry(blog).State = EntityState.Modified.

Verileri Güncelleştirme

EF, bağlam tarafından izlenen mevcut bir varlıkta yapılan değişiklikleri otomatik olarak algılar. Bu, veritabanından yüklediğiniz/sorguladığınız varlıkları ve daha önce eklenip veritabanına kaydedilmiş varlıkları içerir.

Özelliklere atanan değerleri değiştirmeniz ve çağrısı SaveChangesyapmanız yeterlidir:

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Single(b => b.Url == "http://example.com");
    blog.Url = "http://example.com/blog";
    context.SaveChanges();
}

Veri silme

DbSet<TEntity>.Remove Varlık sınıflarınızın örneklerini silmek için yöntemini kullanın:

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Single(b => b.Url == "http://example.com/blog");
    context.Blogs.Remove(blog);
    context.SaveChanges();
}

Varlık veritabanında zaten varsa, sırasında SaveChangessilinir. Varlık henüz veritabanına kaydedilmediyse (eklendiği gibi izlenir) bağlamdan kaldırılır ve çağrıldığında SaveChanges artık eklenmez.

Tek bir SaveChanges'te Birden Çok İşlem

Birden çok Ekleme/Güncelleştirme/Kaldırma işlemlerini tek bir çağrıda SaveChangesbirleştirebilirsiniz:

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();
}

Dekont

Çoğu veritabanı sağlayıcısı SaveChanges için işlemseldir. Bu, tüm işlemlerin başarılı veya başarısız olduğu ve hiçbir zaman kısmen uygulanmayacağı anlamına gelir.