Skip to content

Entity Framework - Raw SQL

Giriş

Entity Framework'te Raw SQL (Ham SQL), LINQ sorguları yerine doğrudan SQL sorguları yazmayı ve çalıştırmayı sağlayan bir özelliktir. Mid-level geliştiriciler için bu özelliğin anlaşılması ve etkin kullanımı kritik öneme sahiptir.

Raw SQL'in Önemi

  1. Performans
  2. Daha hızlı sorgu çalıştırma
  3. Daha az kaynak kullanımı
  4. Daha iyi sorgu optimizasyonu
  5. Karmaşık sorgular için uygunluk

  6. Esneklik

  7. Özel SQL özellikleri kullanımı
  8. Stored procedure'ler
  9. View'lar
  10. Database-specific özellikler

  11. Bakım

  12. Daha az kod
  13. Daha kolay debug
  14. Daha iyi test edilebilirlik
  15. Daha kolay bakım

Raw SQL Teknikleri

  1. FromSqlRaw

    // Temel sorgu
    var blogs = await _context.Blogs
        .FromSqlRaw("SELECT * FROM Blogs WHERE Rating > {0}", 3)
        .ToListAsync();
    
    // Parametreli sorgu
    var blogs = await _context.Blogs
        .FromSqlRaw("SELECT * FROM Blogs WHERE Rating > {0} AND Category = {1}", 3, "Technology")
        .ToListAsync();
    
    // Stored procedure
    var blogs = await _context.Blogs
        .FromSqlRaw("EXEC GetTopRatedBlogs @MinRating = {0}", 3)
        .ToListAsync();
    
    // View kullanımı
    var blogStats = await _context.BlogStats
        .FromSqlRaw("SELECT * FROM vw_BlogStatistics")
        .ToListAsync();
    

  2. FromSqlInterpolated

    // String interpolation ile
    var minRating = 3;
    var category = "Technology";
    var blogs = await _context.Blogs
        .FromSqlInterpolated($"SELECT * FROM Blogs WHERE Rating > {minRating} AND Category = {category}")
        .ToListAsync();
    
    // Parametreli stored procedure
    var blogs = await _context.Blogs
        .FromSqlInterpolated($"EXEC GetTopRatedBlogs @MinRating = {minRating}")
        .ToListAsync();
    

  3. ExecuteSqlRaw

    // Temel sorgu
    await _context.Database.ExecuteSqlRawAsync(
        "UPDATE Blogs SET Rating = Rating + 1 WHERE Category = {0}", "Technology");
    
    // Parametreli sorgu
    await _context.Database.ExecuteSqlRawAsync(
        "UPDATE Blogs SET Rating = Rating + 1 WHERE Category = {0} AND Rating < {1}", 
        "Technology", 5);
    
    // Stored procedure
    await _context.Database.ExecuteSqlRawAsync(
        "EXEC UpdateBlogRatings @Category = {0}, @Increment = {1}", 
        "Technology", 1);
    

  4. ExecuteSqlInterpolated

    // String interpolation ile
    var category = "Technology";
    var increment = 1;
    await _context.Database.ExecuteSqlInterpolatedAsync(
        $"UPDATE Blogs SET Rating = Rating + {increment} WHERE Category = {category}");
    
    // Parametreli stored procedure
    await _context.Database.ExecuteSqlInterpolatedAsync(
        $"EXEC UpdateBlogRatings @Category = {category}, @Increment = {increment}");
    

  5. Raw SQL ile LINQ

    // Raw SQL + LINQ
    var blogs = await _context.Blogs
        .FromSqlRaw("SELECT * FROM Blogs WHERE Rating > {0}", 3)
        .Where(b => b.Category == "Technology")
        .OrderByDescending(b => b.CreatedDate)
        .ToListAsync();
    
    // Raw SQL + Include
    var blogs = await _context.Blogs
        .FromSqlRaw("SELECT * FROM Blogs WHERE Rating > {0}", 3)
        .Include(b => b.Posts)
        .ToListAsync();
    

Best Practices

  1. Raw SQL Tasarımı
  2. SQL injection önleme
  3. Parametre kullanımı
  4. Query optimizasyonu
  5. Error handling

  6. Performans

  7. Query optimizasyonu
  8. Index kullanımı
  9. Batch processing
  10. Resource yönetimi

  11. Güvenlik

  12. SQL injection önleme
  13. Parametre kullanımı
  14. Access control
  15. Audit logging

  16. Bakım

  17. Kod organizasyonu
  18. Documentation
  19. Testing
  20. Monitoring

Mülakat Soruları

Temel Sorular

  1. Entity Framework'te Raw SQL nedir?
  2. Cevap: Raw SQL, LINQ sorguları yerine doğrudan SQL sorguları yazmayı ve çalıştırmayı sağlayan bir özelliktir.

  3. Entity Framework'te FromSqlRaw nedir?

  4. Cevap: FromSqlRaw, entity'leri döndüren SQL sorgularını çalıştırmak için kullanılan bir metottur.

  5. Entity Framework'te ExecuteSqlRaw nedir?

  6. Cevap: ExecuteSqlRaw, sonuç döndürmeyen SQL sorgularını çalıştırmak için kullanılan bir metottur.

  7. Entity Framework'te SQL injection nasıl önlenir?

  8. Cevap: Parametre kullanımı ve FromSqlInterpolated/ExecuteSqlInterpolated kullanılarak önlenir.

  9. Entity Framework'te Raw SQL ne zaman kullanılır?

  10. Cevap: Karmaşık sorgular, stored procedure'ler, view'lar veya performans gerektiren durumlarda kullanılır.

Teknik Sorular

  1. FromSqlRaw nasıl kullanılır?
  2. Cevap:

    var blogs = await _context.Blogs
        .FromSqlRaw("SELECT * FROM Blogs WHERE Rating > {0}", 3)
        .ToListAsync();
    

  3. FromSqlInterpolated nasıl kullanılır?

  4. Cevap:

    var minRating = 3;
    var blogs = await _context.Blogs
        .FromSqlInterpolated($"SELECT * FROM Blogs WHERE Rating > {minRating}")
        .ToListAsync();
    

  5. ExecuteSqlRaw nasıl kullanılır?

  6. Cevap:

    await _context.Database.ExecuteSqlRawAsync(
        "UPDATE Blogs SET Rating = Rating + 1 WHERE Category = {0}", "Technology");
    

  7. Raw SQL ile LINQ nasıl birleştirilir?

  8. Cevap:

    var blogs = await _context.Blogs
        .FromSqlRaw("SELECT * FROM Blogs WHERE Rating > {0}", 3)
        .Where(b => b.Category == "Technology")
        .OrderByDescending(b => b.CreatedDate)
        .ToListAsync();
    

  9. Stored procedure nasıl çağrılır?

  10. Cevap:
    var blogs = await _context.Blogs
        .FromSqlRaw("EXEC GetTopRatedBlogs @MinRating = {0}", 3)
        .ToListAsync();
    

İleri Seviye Sorular

  1. Entity Framework'te Raw SQL performansı nasıl optimize edilir?
  2. Cevap:

    • Query optimizasyonu
    • Index kullanımı
    • Batch processing
    • Resource yönetimi
    • Caching stratejileri
  3. Entity Framework'te distributed sistemlerde Raw SQL nasıl yönetilir?

  4. Cevap:

    • Distributed transactions
    • Data partitioning
    • Replication
    • Consistency
    • Conflict resolution
  5. Entity Framework'te high concurrency senaryolarında Raw SQL nasıl yönetilir?

  6. Cevap:

    • Optimistic concurrency
    • Pessimistic concurrency
    • Retry mekanizmaları
    • Queue yönetimi
    • Batch processing
  7. Entity Framework'te Raw SQL monitoring ve profiling nasıl yapılır?

  8. Cevap:

    • Query logging
    • Performance metrics
    • Resource monitoring
    • Profiling tools
    • Health checks
  9. Entity Framework'te custom Raw SQL stratejileri nasıl geliştirilir?

  10. Cevap:
    • Custom SQL builder
    • Custom parameter handling
    • Custom error handling
    • Custom monitoring
    • Custom optimization