ASP.NET Core’da Veritabanı Bağlantı Yönetimi
ASP.NET Core, modern web uygulamaları geliştirmek için güçlü bir platform sunar. Bu platformda veritabanı bağlantı yönetimi, uygulamanızın performansı ve güvenliği açısından kritik bir rol oynar. Bu makalede, ASP.NET Core’da veritabanı bağlantı yönetimini derinlemesine inceleyeceğiz. Bağlantı dizileri, bağlantı havuzu, performans optimizasyonu ve hata yönetimi gibi konulara odaklanacağız.
1. Bağlantı Dizileri (Connection Strings)
Bağlantı dizileri, veritabanı sunucusuna nasıl bağlanacağınızı belirten metin dizeleridir. ASP.NET Core uygulamalarında, genellikle appsettings.json dosyasında saklanırlar.
Bağlantı Dizisi Tanımlama
appsettings.json dosyasında bir bağlantı dizisi tanımlamak için aşağıdaki formatı kullanabilirsiniz:
{
"ConnectionStrings": {
"DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"
}
}
Bu yapı, uygulamanızın farklı ortamlarda (geliştirme, test, üretim) farklı veritabanlarına bağlanmasını kolaylaştırır.
Bağlantı Dizisi Kullanımı
Bağlantı dizisini kullanmak için IConfiguration arayüzünü kullanarak Startup.cs dosyanızda yapılandırabilirsiniz:
public void ConfigureServices(IServiceCollection services)
{
var connectionString = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext(options =>
options.UseSqlServer(connectionString));
}
Bu kod, DbContext sınıfınızı belirtilen bağlantı dizisiyle yapılandırır.
2. Bağlantı Havuzu (Connection Pooling)
Bağlantı havuzu, veritabanı bağlantılarını yönetmek ve yeniden kullanmak için kullanılan bir tekniktir. Bu, bağlantı açma ve kapama maliyetlerini azaltarak uygulamanızın performansını artırır.
Bağlantı Havuzu Nasıl Çalışır?
Bağlantı havuzu, belirli bir bağlantı dizisi için bir grup bağlantı oluşturur ve bu bağlantıları uygulamanızın ihtiyaç duyduğu şekilde yeniden kullanır. Yeni bir bağlantı açmak yerine, mevcut bir bağlantı havuzundan alınır.
Bağlantı Havuzu Ayarları
Bağlantı havuzunu yapılandırmak için bağlantı dizisine ek parametreler ekleyebilirsiniz:
"Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Max Pool Size=100;Min Pool Size=5;"
– Max Pool Size: Havuzdaki maksimum bağlantı sayısını belirler.
– Min Pool Size: Havuzda her zaman açık tutulacak minimum bağlantı sayısını belirler.
3. Performans Optimizasyonu
Veritabanı bağlantı yönetimi, uygulamanızın performansını doğrudan etkiler. Performansı optimize etmek için aşağıdaki stratejileri uygulayabilirsiniz:
Lazy Loading ve Eager Loading
Lazy Loading, yalnızca ihtiyaç duyulduğunda veritabanından veri çeker. Bu, veri yükleme sürecini optimize edebilir, ancak her veri erişiminde ek sorgulara neden olabilir.
Eager Loading ise, ilişkili verileri önceden yükler. Bu, birden fazla veriyi tek bir sorguda alarak performansı artırabilir.
var customers = context.Customers.Include(c => c.Orders).ToList();
Bu örnek, Customers ve ilişkili Orders verilerini tek bir sorguda yükler.
Asenkron İşlemler
Asenkron işlemler, veritabanı sorgularının uygulamanızın diğer işlemlerini engellemesini önler. ASP.NET Core’da asenkron veritabanı işlemleri yapmak için async ve await anahtar kelimelerini kullanabilirsiniz.
public async Task> GetCustomersAsync() { return await context.Customers.ToListAsync(); }
Bu kod, Customers listesini asenkron olarak getirir.
4. Güvenlik
Veritabanı bağlantı yönetiminde güvenlik, uygulamanızın ve verilerinizin korunması için kritik öneme sahiptir.
Bağlantı Dizisi Güvenliği
Bağlantı dizilerini güvenli bir şekilde saklamak için aşağıdaki yöntemleri kullanabilirsiniz:
– Environment Variables: Bağlantı dizilerini çevre değişkenlerinde saklayarak appsettings.json dosyasından kaldırabilirsiniz.
– Azure Key Vault: Azure üzerinde güvenli bir şekilde saklamak için kullanabilirsiniz.
SQL Injection Önleme
SQL Injection saldırılarına karşı korunmak için parametreli sorgular kullanın:
var customer = context.Customers
.FromSqlRaw("SELECT * FROM Customers WHERE Name = @p0", customerName)
.ToList();
Bu, kullanıcıdan gelen girdilerin doğrudan sorguya dahil edilmesini önler.
5. Hata Yönetimi
Veritabanı bağlantı hataları, uygulamanızın kararlılığını etkileyebilir. Bu nedenle, hata yönetimi stratejileri geliştirmek önemlidir.
Retry Pattern
Bağlantı hataları için Retry Pattern kullanarak belirli bir süre sonra işlemi yeniden deneyebilirsiniz:
services.AddDbContext(options => options.UseSqlServer(connectionString, sqlOptions => { sqlOptions.EnableRetryOnFailure( maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); }));
Bu, belirli sayıda başarısız bağlantı denemesinden sonra işlemi yeniden dener.
Logging
Veritabanı bağlantı hatalarını izlemek için kapsamlı bir logging stratejisi geliştirin. ASP.NET Core’da ILogger arayüzünü kullanarak loglama yapabilirsiniz.
public class CustomerService
{
private readonly ILogger _logger;
public CustomerService(ILogger logger)
{
_logger = logger;
}
public void LogError(Exception ex)
{
_logger.LogError(ex, "An error occurred while accessing the database.");
}
}
Bu kod, veritabanı erişim hatalarını loglar.
Sonuç
ASP.NET Core’da veritabanı bağlantı yönetimi, performans, güvenlik ve hata yönetimi açısından kritik bir konudur. Bağlantı dizileri, bağlantı havuzu, performans optimizasyonu ve güvenlik stratejileri gibi konulara hakim olarak, uygulamanızın veritabanı erişimini daha etkili bir şekilde yönetebilirsiniz. Ayrıca, VDS Sunucular veya Cloud Sunucular gibi çözümlerle altyapınızı güçlendirerek, veritabanı yönetiminizi daha da optimize edebilirsiniz.


