Entity Framework Core (EF Core), veri erişim işlemlerini kolaylaştıran güçlü bir ORM (Object Relational Mapper) aracıdır.

EF Core’da Loglama ve Takip Etme Teknikleri

Entity Framework Core (EF Core), veri erişim işlemlerini kolaylaştıran güçlü bir ORM (Object Relational Mapper) aracıdır. Ancak, uygulamalardaki veri erişim operasyonlarını anlamak, hataları tespit etmek ve performansı optimize etmek için loglama ve takip etme kritik bir rol oynar. Bu makalede, EF Core’da loglama ve değişiklik takibi konularını ele alacağız ve çeşitli tekniklere dair kod örnekleri sunacağız.


1. EF Core’da Loglama

EF Core, varsayılan olarak Microsoft.Extensions.Logging altyapısını kullanır. Loglama, veri tabanına yapılan sorguları, hata mesajlarını ve diğer önemli olayları izlemek için kullanılabilir.

Loglama Yapılandırması

EF Core’da loglama için DbContext'i yapılandırırken bir loglama sağlayıcısı ayarlanabilir. Örneğin, konsola log yazdırmak için AddConsole kullanabilirsiniz.

Örnek Kod: Konsola Log Yazdırma

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using System;

public class AppDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder
            .UseSqlServer("YourConnectionString")
            .LogTo(Console.WriteLine, LogLevel.Information); // Log seviyesini belirtin
    }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

Bu örnekte, EF Core tarafından üretilen SQL sorguları ve diğer loglar konsola yazdırılacaktır.

Daha Detaylı Loglama İçin Kategori Filtreleme

Logları belirli kategorilerle filtreleyebilirsiniz:

optionsBuilder
    .LogTo(Console.WriteLine, new[] { DbLoggerCategory.Database.Command.Name }, LogLevel.Information);

Bu, yalnızca veri tabanı komutlarını (örneğin, SQL sorguları) loglar.


2. Değişiklik Takibi (Change Tracking)

EF Core, ChangeTracker bileşeni sayesinde nesnelerdeki değişiklikleri izleyebilir. Bu özellik, veri tabanına hangi işlemlerin uygulanacağını belirlemek için kullanılır.

Değişiklik Takibine Genel Bakış

EF Core’da bir varlık (entity) DbContext'e eklendiğinde, EF Core onun durumunu (EntityState) izler. Olası durumlar:

  • Added: Yeni bir varlık eklendi.
  • Modified: Mevcut bir varlıkta değişiklik yapıldı.
  • Deleted: Mevcut bir varlık silindi.
  • Unchanged: Varlık değişmedi.

Örnek Kod: Değişiklik Takibini Kullanma

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        using var context = new AppDbContext();

        var product = context.Products.First();
        product.Price += 10; // Fiyatı artır

        // Değişiklikleri kontrol et
        var entries = context.ChangeTracker.Entries();
        foreach (var entry in entries)
        {
            Console.WriteLine($"Entity: {entry.Entity.GetType().Name}, State: {entry.State}");
        }

        context.SaveChanges();
    }
}

Bu kodda, bir ürünün fiyatını değiştirdikten sonra ChangeTracker ile değişiklikleri kontrol ediyoruz.


3. Özel Loglama ve Takip Mekanizmaları

Loglama ve değişiklik takibini özelleştirmek için aşağıdaki yöntemlerden faydalanabilirsiniz.

Özel Loglama Mekanizması

EF Core loglarını kendi loglama altyapınıza yönlendirmek için bir ILogger sağlayıcısı kullanabilirsiniz:

Örnek Kod: Özel ILogger Kullanımı

using Microsoft.Extensions.Logging;

public class CustomLoggerProvider : ILoggerProvider
{
    public ILogger CreateLogger(string categoryName) => new CustomLogger();

    public void Dispose() { }
}

public class CustomLogger : ILogger
{
    public IDisposable BeginScope<TState>(TState state) => null;

    public bool IsEnabled(LogLevel logLevel) => logLevel >= LogLevel.Information;

    public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, string> formatter)
    {
        Console.WriteLine($"LogLevel: {logLevel}, EventId: {eventId}, Message: {formatter(state)}");
    }
}

DbContext içinde bu log sağlayıcısını etkinleştirin:

optionsBuilder
    .UseSqlServer("YourConnectionString")
    .UseLoggerFactory(new LoggerFactory(new[] { new CustomLoggerProvider() }));

Değişiklik Takibini Özelleştirme

Değişiklik takibini daha etkili kullanmak için takip edilen varlıkları ve özellikleri sınırlayabilirsiniz:

Örnek Kod: Belirli Özellikleri Takip Etme

using Microsoft.EntityFrameworkCore.ChangeTracking;

var entry = context.Entry(product);
entry.Property(p => p.Price).IsModified = true; // Sadece Price özelliği izlenir

Bu kod, yalnızca Price özelliğinin değişikliklerini takip eder.


4. Performans İpuçları

  • Takip Edilmeyen Sorgular: Takip gerektirmeyen sorgular için AsNoTracking kullanabilirsiniz:
    var products = context.Products.AsNoTracking().ToList();
    
  • Loglama Seviyesini Azaltma: Yalnızca kritik olaylar için loglama yapmak performansı artırabilir.

Sonuç

EF Core’da loglama ve değişiklik takibi, veri erişim katmanını daha iyi anlamanızı ve yönetmenizi sağlar. Bu makalede ele alınan teknikler ve kod örnekleri, loglama ihtiyaçlarınıza ve değişiklik takibi gereksinimlerinize uygun çözümler sunar. Geliştirme sürecinde bu özellikleri etkin şekilde kullanarak uygulamalarınızın güvenilirliğini ve performansını artırabilirsiniz.

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder