Aracılığıyla paylaş


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 olarak, değişiklik izleyicisi dahil olmadan ExecuteUpdate ve ExecuteDelete 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.

Tavsiye

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);
    await context.SaveChangesAsync();
}

Tavsiye

Add, Attach ve 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 = await context.Blogs.SingleAsync(b => b.Url == "http://example.com");
    blog.Url = "http://example.com/blog";
    await context.SaveChangesAsync();
}

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 = await context.Blogs.SingleAsync(b => b.Url == "http://example.com/blog");
    context.Blogs.Remove(blog);
    await context.SaveChangesAsync();
}

Eğer varlık veritabanında zaten mevcutsa, SaveChanges sırasında silinecektir. Varlık henüz veritabanına kaydedilmediyse (eklenmiş olarak izleniyorsa), bağlamdan kaldırılır ve SaveChanges çağrıldığında 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" });
    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();
}

Uyarı

Çoğu veritabanı sağlayıcısı için SaveChanges 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.