C# Entity Framework Core Giriş
C#’ta Entity Framework Core temellerini öğrenin. DbContext, DbSet ve temel veri işlemleri örneklerle anlatılıyor.
Entity Framework Core (EF Core), .NET dünyasında nesne–ilişkisel eşleme (ORM) aracı olarak kullanılan, veritabanı işlemlerini nesne yönelimli bir yaklaşımla yapmayı sağlayan bir kütüphanedir. EF Core sayesinde veritabanı tablolarını doğrudan SQL sorguları yazmadan, C# sınıfları üzerinden yönetebiliriz. Bu makalede EF Core’un temellerine, DbContext, Entity (Varlık) tanımlamalarına ve temel CRUD işlemlerine değineceğiz. (MS-SQL özelinde ayrıntılara girilmeyecek, genel EF Core yaklaşımı anlatılacaktır.)
EF Core’un Avantajları
- ORM Yaklaşımı: SQL yerine C# kodu ile veritabanı işlemleri yapılır.
- Tip Güvenliği: LINQ sorguları derleme zamanında kontrol edilir.
- Taşınabilirlik: EF Core birçok veritabanı sağlayıcısını destekler (SQLite, PostgreSQL, MySQL vb.).
- Kod-Öncelikli Geliştirme: Veritabanı tabloları doğrudan C# sınıflarından oluşturulabilir.
Entity (Varlık) Tanımlama
EF Core’da bir veritabanı tablosu genellikle bir C# sınıfı ile temsil edilir. Sınıftaki özellikler tablo sütunları olarak eşlenir.
public class Product
{
public int Id { get; set; } // Birincil anahtar
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
DbContext Sınıfı
DbContext, EF Core’un kalbidir.
Veritabanı bağlantısı ve tablolarla ilgili işlemler DbContext üzerinden yapılır.
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Veritabanı sağlayıcısı burada ayarlanır
optionsBuilder.UseInMemoryDatabase("TestDb");
}
}
Not: Bu örnekte basitlik için InMemoryDatabase kullanılmıştır.
Temel CRUD İşlemleri
EF Core ile Create, Read, Update, Delete işlemleri kolayca yapılabilir.
using (var db = new AppDbContext())
{
// CREATE
db.Products.Add(new Product { Name = "Laptop", Price = 15000 });
db.SaveChanges();
// READ
var products = db.Products.ToList();
foreach (var p in products)
Console.WriteLine($"{p.Id} - {p.Name} - {p.Price}");
// UPDATE
var product = db.Products.First();
product.Price = 14000;
db.SaveChanges();
// DELETE
db.Products.Remove(product);
db.SaveChanges();
}
LINQ ile Sorgulama
EF Core, LINQ (Language Integrated Query) ile entegre çalışır. Böylece SQL yazmadan güçlü ve tip güvenli sorgular yapılabilir.
// 10000 TL'den pahalı ürünleri seç
using (var db = new AppDbContext())
{
var expensive = db.Products
.Where(p => p.Price > 10000)
.OrderBy(p => p.Name);
foreach (var item in expensive)
Console.WriteLine(item.Name);
}
Migration Kavramı
EF Core, veritabanı şemasını koddan oluşturmak veya güncellemek için Migration yapısını sunar. Kodda yapılan değişiklikler migration ile takip edilerek veritabanına uygulanabilir.
// Örnek komutlar (CLI üzerinden çalıştırılır)
// dotnet ef migrations add InitialCreate
// dotnet ef database update
TL;DR
- EF Core, ORM yaklaşımı ile veritabanı işlemlerini kolaylaştırır.
DbContext: Veritabanı bağlantısı ve tablolarla ilgili işlemleri yönetir.Entity: Tabloları temsil eden C# sınıflarıdır.- CRUD işlemleri (Ekle, Oku, Güncelle, Sil) kolayca yapılır.
- LINQ ile tip güvenli sorgular yazılabilir.
- Migration ile veritabanı şeması kod üzerinden yönetilebilir.