VuePressVuePress
Home
Get Started
Home
Get Started
  • Temel Kavramlar

    • Type Declarations (Tur Bildirimleri)
    • Access Modifiers (Erişim Değiştiricileri)
    • Erişimci (Accessor)
  • Metotlar ve İşlemler

    • Metotlar (Methods)
    • Geri Dönüş Türleri (Return Types)
    • Try-Catch Kullanımı
  • Veri Yapıları

    • Koleksiyon Arayüzleri (Collection Interfaces)
    • LINQ Sorguları
  • İleri Konular

    • Dependency Injection Servisleri
    • DbContext - OnModelCreating Metodu
  • DbContext ve Entity Framework

    • Entity Framework Core - Fluent API ve İlişkiler Rehberi

DbContext - OnModelCreating Metodu

OnModelCreating Nedir?

OnModelCreating metodu, Entity Framework Core'da veritabanı şemasını ve model konfigürasyonunu tanımlamak için kullanılır.

OnModelCreating İçinde Yazılan Şeyler

1. Entity Konfigürasyonu

modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<User>().HasKey(u => u.Id);
}

2. Fluent API ile İlişkiler Tanımlama

// One-to-Many
modelBuilder.Entity<User>()
    .HasMany(u => u.Posts)
    .WithOne(p => p.User)
    .HasForeignKey(p => p.UserId);

// Many-to-Many
modelBuilder.Entity<Student>()
    .HasMany(s => s.Courses)
    .WithMany(c => c.Students)
    .UsingEntity(j => j.ToTable("StudentCourses"));

3. Property Konfigürasyonu

modelBuilder.Entity<User>()
    .Property(u => u.Email)
    .IsRequired()
    .HasMaxLength(255);

modelBuilder.Entity<User>()
    .Property(u => u.CreatedAt)
    .HasDefaultValueSql("GETDATE()");

4. Unique Constraints

modelBuilder.Entity<User>()
    .HasIndex(u => u.Email)
    .IsUnique();

5. Default Values

modelBuilder.Entity<User>()
    .Property(u => u.IsActive)
    .HasDefaultValue(true);

6. Shadow Properties

modelBuilder.Entity<User>()
    .Property<DateTime>("CreatedAt");

7. Seed Data (İlk Veriler)

modelBuilder.Entity<Role>().HasData(
    new Role { Id = 1, Name = "Admin" },
    new Role { Id = 2, Name = "User" }
);

8. Computed Columns

modelBuilder.Entity<User>()
    .Property(u => u.FullName)
    .HasComputedColumnSql("FirstName + ' ' + LastName");

9. Cascade Delete Ayarları

modelBuilder.Entity<User>()
    .HasMany(u => u.Posts)
    .WithOne(p => p.User)
    .OnDelete(DeleteBehavior.Cascade);

10. Discriminator (TPH - Table Per Hierarchy)

modelBuilder.Entity<Person>()
    .HasDiscriminator<string>("PersonType")
    .HasValue<Student>("Student")
    .HasValue<Teacher>("Teacher");

Örnek Tam Implementasyon

public class ApplicationDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        // User Entity
        modelBuilder.Entity<User>()
            .HasKey(u => u.Id);
        
        modelBuilder.Entity<User>()
            .Property(u => u.Email)
            .IsRequired()
            .HasMaxLength(255);
        
        modelBuilder.Entity<User>()
            .HasIndex(u => u.Email)
            .IsUnique();

        // Post Entity
        modelBuilder.Entity<Post>()
            .HasKey(p => p.Id);
        
        // İlişki
        modelBuilder.Entity<User>()
            .HasMany(u => u.Posts)
            .WithOne(p => p.User)
            .HasForeignKey(p => p.UserId)
            .OnDelete(DeleteBehavior.Cascade);
    }
}
Last Updated:: 6/7/26, 12:33 PM
Contributors: yigitumretastan
Prev
Dependency Injection Servisleri