Bu proje, Entity Framework Core'un temel ve gelişmiş özelliklerini öğrenmek için tasarlanmış kapsamlı bir eğitim projesidir.
- .NET 8.0 - En güncel .NET sürümü
- ASP.NET Core Web API - RESTful API geliştirme
- Entity Framework Core 8.0.5 - Modern ORM framework
- Microsoft SQL Server - İlişkisel veritabanı
- EF Core Design Tools - Migration ve model oluşturma araçları
- EF Core Tools - CLI komutları için
- Serilog - Yapılandırılabilir logging framework
- Console ve Debug logging - Geliştirme ortamı için
- Swagger/OpenAPI - API dokümantasyonu ve test arayüzü
- async/await - Asenkron operasyonlar
- Task - Asenkron görev yönetimi
- IQueryable - LINQ sorguları için
- LINQ (Language Integrated Query) - Veri sorgulama
- Custom LINQ Extensions - Özel extension metodları
- IEnumerable - Koleksiyon işlemleri
EFCoreTutorial/
├── src/
│ ├── EFCoreTutorial.WebApi/ # Web API katmanı
│ │ ├── Controllers/ # API Controller'ları
│ │ ├── Program.cs # Uygulama başlangıç noktası
│ │ └── appsettings.json # Konfigürasyon dosyaları
│ ├── EFCoreTutorial.Data/ # Veri erişim katmanı
│ │ ├── Context/ # DbContext sınıfları
│ │ ├── Models/ # Entity modelleri
│ │ └── Migrations/ # EF Core migrations
│ └── EFCoreTutorial.Common/ # Ortak kullanılan sınıflar
│ └── StringConstants.cs # Sabit değerler
├── TBCustomLinq/ # Custom LINQ örnekleri
│ ├── LinQExtensions.cs # Özel extension metodları
│ └── UserModel.cs # Örnek model
└── EFCoreTutorial.sln # Solution dosyası
- Controllers: REST API endpoint'leri
- Dependency Injection: Service container konfigürasyonu
- Middleware: Serilog, Swagger, CORS konfigürasyonu
- Async/Await: Asenkron controller metodları
- DbContext: Entity Framework Core context sınıfı
- Entity Models: Veritabanı tablolarını temsil eden sınıflar
- Relationships: One-to-One, One-to-Many, Many-to-Many ilişkiler
- Fluent API: Model konfigürasyonu
- Constants: Sabit değerler ve connection string'ler
- Shared Models: Ortak kullanılan model sınıfları
- One-to-One: Student ↔ StudentAddress
- One-to-Many: Student ↔ Books
- Many-to-Many: Student ↔ Courses
- Eager Loading: Include() ile ilişkili verilerin yüklenmesi
- Lazy Loading: Proxy kullanarak otomatik yükleme
- Explicit Loading: Load() ile manuel yükleme
- LINQ Queries: Where, OrderBy, Select, FirstOrDefault
- Async Operations: ToListAsync(), FirstOrDefaultAsync()
- Filtering: Dinamik filtreleme işlemleri
- Projection: Select ile veri dönüşümü
- Fluent API: OnModelCreating ile detaylı konfigürasyon
- Column Mapping: Özel kolon isimleri ve tipleri
- Constraints: Foreign key ve index tanımları
- Default Values: Varsayılan değerler
- .NET 8.0 SDK
- SQL Server (Express veya üzeri)
- Visual Studio 2022 veya VS Code
- Projeyi klonlayın
- Connection string'i
StringConstants.csdosyasında güncelleyin - Migration'ları çalıştırın:
dotnet ef database update
- Projeyi çalıştırın:
dotnet run --project src/EFCoreTutorial.WebApi
- DbContext yaşam döngüsü
- Entity konfigürasyonu
- Migration yönetimi
- İlişki tanımları
- Sorgu optimizasyonu
- async/await pattern
- Task kullanımı
- Asenkron veritabanı operasyonları
- Performance optimizasyonu
- Extension method yazımı
- IEnumerable operasyonları
- Custom filtering ve projection
- Method chaining
- RESTful endpoint tasarımı
- Dependency injection
- Middleware konfigürasyonu
- Error handling
GET /api/student- Öğrenci listesiPOST /api/student- Yeni öğrenci eklemePUT /api/student- Öğrenci güncellemeDELETE /api/student/{id}- Öğrenci silme
var students = await context.Students
.Include(s => s.Books)
.Include(s => s.Address)
.ToListAsync();var evenIdUsers = users.TBWhere_EvenId();
var gmailUsers = users.TBWhere_GmailUsers();var students = context.Students.AsQueryable();
if (!string.IsNullOrEmpty(filter.FirstName))
students = students.Where(s => s.FirstName == filter.FirstName);- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Commit yapın (
git commit -m 'Add amazing feature') - Push yapın (
git push origin feature/amazing-feature) - Pull Request oluşturun
Bu proje eğitim amaçlı oluşturulmuştur.
Bircan Yılmaz
- GitHub: @bircany
- Repository: EFCoreTutorial