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
, 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ı SaveChanges
yapmanı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 SaveChanges
silinir. 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 SaveChanges
birleş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.