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¶
- Performans
- Daha hızlı sorgu çalıştırma
- Daha az kaynak kullanımı
- Daha iyi sorgu optimizasyonu
-
Karmaşık sorgular için uygunluk
-
Esneklik
- Özel SQL özellikleri kullanımı
- Stored procedure'ler
- View'lar
-
Database-specific özellikler
-
Bakım
- Daha az kod
- Daha kolay debug
- Daha iyi test edilebilirlik
- Daha kolay bakım
Raw SQL Teknikleri¶
-
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();
-
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();
-
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);
-
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}");
-
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¶
- Raw SQL Tasarımı
- SQL injection önleme
- Parametre kullanımı
- Query optimizasyonu
-
Error handling
-
Performans
- Query optimizasyonu
- Index kullanımı
- Batch processing
-
Resource yönetimi
-
Güvenlik
- SQL injection önleme
- Parametre kullanımı
- Access control
-
Audit logging
-
Bakım
- Kod organizasyonu
- Documentation
- Testing
- Monitoring
Mülakat Soruları¶
Temel Sorular¶
- Entity Framework'te Raw SQL nedir?
-
Cevap: Raw SQL, LINQ sorguları yerine doğrudan SQL sorguları yazmayı ve çalıştırmayı sağlayan bir özelliktir.
-
Entity Framework'te FromSqlRaw nedir?
-
Cevap: FromSqlRaw, entity'leri döndüren SQL sorgularını çalıştırmak için kullanılan bir metottur.
-
Entity Framework'te ExecuteSqlRaw nedir?
-
Cevap: ExecuteSqlRaw, sonuç döndürmeyen SQL sorgularını çalıştırmak için kullanılan bir metottur.
-
Entity Framework'te SQL injection nasıl önlenir?
-
Cevap: Parametre kullanımı ve FromSqlInterpolated/ExecuteSqlInterpolated kullanılarak önlenir.
-
Entity Framework'te Raw SQL ne zaman kullanılır?
- Cevap: Karmaşık sorgular, stored procedure'ler, view'lar veya performans gerektiren durumlarda kullanılır.
Teknik Sorular¶
- FromSqlRaw nasıl kullanılır?
-
Cevap:
var blogs = await _context.Blogs .FromSqlRaw("SELECT * FROM Blogs WHERE Rating > {0}", 3) .ToListAsync();
-
FromSqlInterpolated nasıl kullanılır?
-
Cevap:
var minRating = 3; var blogs = await _context.Blogs .FromSqlInterpolated($"SELECT * FROM Blogs WHERE Rating > {minRating}") .ToListAsync();
-
ExecuteSqlRaw nasıl kullanılır?
-
Cevap:
await _context.Database.ExecuteSqlRawAsync( "UPDATE Blogs SET Rating = Rating + 1 WHERE Category = {0}", "Technology");
-
Raw SQL ile LINQ nasıl birleştirilir?
-
Cevap:
var blogs = await _context.Blogs .FromSqlRaw("SELECT * FROM Blogs WHERE Rating > {0}", 3) .Where(b => b.Category == "Technology") .OrderByDescending(b => b.CreatedDate) .ToListAsync();
-
Stored procedure nasıl çağrılır?
- Cevap:
var blogs = await _context.Blogs .FromSqlRaw("EXEC GetTopRatedBlogs @MinRating = {0}", 3) .ToListAsync();
İleri Seviye Sorular¶
- Entity Framework'te Raw SQL performansı nasıl optimize edilir?
-
Cevap:
- Query optimizasyonu
- Index kullanımı
- Batch processing
- Resource yönetimi
- Caching stratejileri
-
Entity Framework'te distributed sistemlerde Raw SQL nasıl yönetilir?
-
Cevap:
- Distributed transactions
- Data partitioning
- Replication
- Consistency
- Conflict resolution
-
Entity Framework'te high concurrency senaryolarında Raw SQL nasıl yönetilir?
-
Cevap:
- Optimistic concurrency
- Pessimistic concurrency
- Retry mekanizmaları
- Queue yönetimi
- Batch processing
-
Entity Framework'te Raw SQL monitoring ve profiling nasıl yapılır?
-
Cevap:
- Query logging
- Performance metrics
- Resource monitoring
- Profiling tools
- Health checks
-
Entity Framework'te custom Raw SQL stratejileri nasıl geliştirilir?
- Cevap:
- Custom SQL builder
- Custom parameter handling
- Custom error handling
- Custom monitoring
- Custom optimization