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

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

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

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.