Yeni bir asp.net core projesi oluşturduğunuzda büyük ihtimalle ilk yapmanız gerekenlerden biri “EF configuration” ile veritabanı bağlantısı kurmak ve modellerinizi EF’e tanıtmak olacaktır.
Bu yazıda sıfırdan bir projede basitçe model oluşturup bir api endpoint üzerinden EF ile MSSQL veritabanına bağlanarak veri çekip kullanıcının tarayıcısına ileteceğiz. Sadece EF kısmına odaklanacağız ve diğer best practice’lere çok takılmayacağım.
Bu yazıda EF : Microsoft Entity Framework kısaltmasıdır.
Projemiz basit bir blog sistemi. Post ve Category modellerimiz bulunuyor.
Yazımız başlangıç düzeyi bir yazıdır ve temellere odaklanmakta best practice örneği değil. Bilginize.. Sadece veritabanı konfigüraasyonuna odaklanıyoruz.
Öncelikle gerekli paketlerimizi kuralım
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.ToolsProjemizin dosya yapısı şu şekilde
MyBlogApi/
│
├── Controllers/
├── Data/
│ └── AppDbContext.cs
├── Models/
│ ├── Post.cs
│ └── Category.cs
├── Migrations/
└── Program.csProjemiz MyBlogApi namespace’i kullanıyor. Yazı boyunca “MyBlogApi” yerine kendi namespace’nizi yapıştırabilirsiniz. Eğer örneğe bağlı kalmak isterseniz projenizi “MyBlogApi” ile oluşturabilirsiniz.
Veritabanı Bilgileri
Öncelikle appsettings.json dosyasında ConnectionScrings->DefaultConnection değerini ekliyoruz.
Eğer projemiz development mode da çalışıyorsa appsettings.Development.json dosyasını düzenlemelisiniz.
Bu değer uygulamamız için veritabanı bilgilerini saklıyor.
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MyBlogDb;Trusted_Connection=True;TrustServerCertificate=True"
}
}
MSSQL – EF Core için Connection String Nasıl Oluşturulur? yazımı da inceleyerek bu string’i nasıl oluşturduğumu öğrenebilirsiniz. Örnekde herhangi bir kullanıcı adı ve şifre doğrulaması olmadan veritabanına bağlanmaktadır. Sizin durumunuzda farklı bir connection string gerekebilir.
Model Tanımlama
Modellerimizi tanımlayalım:
Models/Post.cs
namespace MyBlogApi.Models
{
public class Post
{
public int Id { get; set; }
public string Title { get; set; } = null!;
public string Content { get; set; } = null!;
public int CategoryId { get; set; }
public Category Category { get; set; } = null!;
}
}
Models/Category.cs
namespace MyBlogApi.Models
{
public class Category
{
public int Id { get; set; }
public string Name { get; set; } = null!;
public ICollection<Post> Posts { get; set; } = new List<Post>();
}
}Veritabanı Sınıfı ve Dependency Injection
Veritabanı yapımızı ve modellerimizi EF’e tanıtmak için AppDbContext sınıfımızı oluşturalım.
Data/AppDbContext.cs
using Microsoft.EntityFrameworkCore;
using MyBlogApi.Models;
namespace MyBlogApi.Data
{
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options) { }
public DbSet<Post> Posts { get; set; }
public DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// İlişki tanımlama
modelBuilder.Entity<Category>()
.HasMany(c => c.Posts)
.WithOne(p => p.Category)
.HasForeignKey(p => p.CategoryId);
base.OnModelCreating(modelBuilder);
}
}
}
Sıradaki adımımız Program.cs dosyasına veritabanı giriş bilgilerimizi ve bağlantı sınıfımızı “Dependency Injection” ile tanıtmak.
Bunun için “connection string” değerimizi okuyacağız ve AddDbContect extension method ile sınıfımızı DI’a ekleyeceğiz.
Ekleyeceğimiz satırlar
// Connection string
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
// EF Core servisini ekle
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(connectionString));Program.cs son hali:
using Microsoft.EntityFrameworkCore;
using MyBlogApi.Data;
var builder = WebApplication.CreateBuilder(args);
// Connection string
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
// EF Core servisini ekle
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Swagger
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
Son hali paylaşma sebebim, nereye ekleyeceğinizi tam anlamanız için bunu yapıyorum.
Tabloları Oluşturalım
EF sistemi “Code First” bir yaklaşım içerisindedir ve tanımladığımız modellerden otomatik olarak veritabanı tablolarımızı oluşturur. Bunun için aşağıdaki iki komut ile migration oluşturup veritabanımızı güncellememiz gerekir.
dotnet ef migrations add InitialCreate
dotnet ef database updateBu yazıda yer alan bilgiler .net 9 için test edilmiştir. Farklı sürümlerde farklı sonuçlar oluşyabilir. Dersimizin amacı başlangıç düzey bir belge oluşturmak.

Bir yanıt yazın