EF Core, veritabanı işlemlerini kolaylaştıran güçlü bir ORM (Object-Relational Mapper) aracıdır.
- Yazılım Uzmanları
- 08 Aralık 2024
- 43 kez görüntülendi.
EF Core ile Soft Delete Nasıl Yapılır?
EF Core, veritabanı işlemlerini kolaylaştıran güçlü bir ORM (Object-Relational Mapper) aracıdır. Ancak, varsayılan olarak "Soft Delete" işlemini desteklemez. Soft delete, bir veriyi fiziksel olarak silmek yerine bir bayrak (örneğin IsDeleted
) kullanarak silinmiş gibi işaretlenmesi yöntemidir. Bu yöntem, veri bütünlüğünü korurken, gerektiğinde silinmiş verilerin kurtarılmasına olanak tanır.
Bu makalede, EF Core ile soft delete işleminin nasıl gerçekleştirileceğini adım adım inceleyeceğiz. Ayrıca uygulamalı bir örnekle süreci detaylandıracağız.
1. Soft Delete Mantığı Nedir?
Soft delete, genellikle bir tabloya şu gibi bir alan eklenerek gerçekleştirilir:
IsDeleted
(bool)DeletedDate
(tarih/saat)
Bu alan, kaydın silinip silinmediğini belirtir. Silme işlemi yapılırken fiziksel olarak veri silinmez, sadece bu alan güncellenir.
2. EF Core ile Soft Delete Nasıl Uygulanır?
Adım 1: Varlık Modelini Güncelleme
Tablonuzda bir IsDeleted
alanı olduğunu varsayalım. Bu alan, kaydın soft delete ile silinip silinmediğini belirtir.
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public bool IsDeleted { get; set; } = false; // Varsayılan değer
}
Adım 2: Global Filtre Tanımlama
EF Core, belirli bir filtreyi tüm sorgularınıza otomatik olarak uygulamanıza olanak tanır. Bunu OnModelCreating
metodunda tanımlayabilirsiniz.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().HasQueryFilter(p => !p.IsDeleted);
base.OnModelCreating(modelBuilder);
}
Bu filtre, IsDeleted
alanı true
olan kayıtların varsayılan olarak getirilmemesini sağlar.
Adım 3: Soft Delete Metodu Oluşturma
Soft delete işlemi için bir metod tanımlayabiliriz:
public async Task SoftDeleteProduct(int id)
{
var product = await _context.Products.FindAsync(id);
if (product != null)
{
product.IsDeleted = true;
await _context.SaveChangesAsync();
}
}
3. Örnek Uygulama
Örnek Veri Ekleme
var product1 = new Product { Name = "Laptop", Price = 15000 };
var product2 = new Product { Name = "Telefon", Price = 8000 };
_context.Products.AddRange(product1, product2);
await _context.SaveChangesAsync();
Soft Delete İşlemi
await SoftDeleteProduct(product1.Id);
Sorgu Çalıştırma
var products = await _context.Products.ToListAsync();
// Sadece IsDeleted = false olan kayıtlar döner.
4. Soft Delete'in Avantajları
- Veri Güvenliği: Veriler fiziksel olarak silinmediği için yanlışlıkla silinmelerin önüne geçilir.
- Raporlama: Silinmiş kayıtlar üzerinde analiz ve raporlama yapılabilir.
- Geri Dönüş: Silinmiş kayıtlar kolayca geri yüklenebilir.
Silinmiş Kaydı Geri Yükleme
public async Task RestoreProduct(int id)
{
var product = await _context.Products.FindAsync(id);
if (product != null && product.IsDeleted)
{
product.IsDeleted = false;
await _context.SaveChangesAsync();
}
}
5. Soft Delete ve Performans
Soft delete, özellikle çok büyük veri kümelerinde sorguların performansını etkileyebilir. Bu nedenle:
- Global filtrelerin optimize edildiğinden emin olun.
- Sorgularda yalnızca gerekli alanları çağırın.
Sonuç
EF Core ile soft delete işlemi, verilerinizi daha güvenli ve yönetilebilir bir şekilde tutmanıza olanak tanır. Bu makalede, soft delete'in nasıl uygulanacağını, avantajlarını ve örnek bir uygulamayı inceledik. Soft delete yöntemini projelerinizde kullanarak veri bütünlüğünü artırabilir ve hatalı silme işlemlerini engelleyebilirsiniz.
Bu yazıya 0 yorum yapılmış.