Bu yazımızda ise Code First yaklaşımında DbContext üzerinden gelen OnModelCreating metodunu inceleyeceğiz.
- Gençay Yıldız
- 07 Mayıs 2019
- 1530 kez görüntülendi.
Bu yazımızda ise Code First yaklaşımında DbContext üzerinden gelen OnModelCreating metodunu inceleyeceğiz.
OnModelCreating Metodu Nasıl Çalışır? Ne İşlev Görmektedir?
OnModelCreating metodu, veritabanı ilk defa oluşturulurken tetiklenen bir virtual metotdur. DbContext içerisinde bulunur. Code First yapısında DbContext’ten miras alarak oluşturduğumuz Context sınıfımızda override ederek kullanacağız. Bu metod sayesinde veritabanı tabloları oluşturulmadan araya girecek, tablo isimlerine müdahale edebilecek veya kolonlara istediğimiz ayarları gerçekleştirebileceğiz.
Şimdi aşağıdaki kod bloğunu inceleyiniz.
class OkulDBContext : DbContext { public DbSet<Ogrenci> Ogrenciler { get; set; } public DbSet<Ogretmen> Ogretmenler { get; set; } public DbSet<Memur> Memurlar { get; set; } }
Bu şekilde bir Context’i çalıştırıp, veritabanını oluşturduğumuz zaman tablolarda aşağıdaki gibi bir isimlendirmeyle karşılaşıyoruz.
Gördüğünüz gibi oluşturmak istediğim tabloların isimlerinin sonuna ‘s’ takısı koyulmakta, bu şekilde anlamsız bir veritabanı dizaynıyla karşılaşılmaktadır.
Tablo Adını Ayarlama
OnModelCreating metodu ile tablolar oluşturulmadan araya girerek aşağıdaki gibi tablo isimlerini belirleyebiliyoruz.
class OkulDBContext : DbContext { public DbSet<Ogrenci> Ogrenciler { get; set; } public DbSet<Ogretmen> Ogretmenler { get; set; } public DbSet<Memur> Memurlar { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Ogrenci>().ToTable("Ogrenciler"); modelBuilder.Entity<Ogretmen>().ToTable("Ogretmenler"); modelBuilder.Entity<Memur>().ToTable("Memurlar"); } }
Bu şekilde alınan sonuç aşağıdaki gibidir.
ToTable metodunun aşağıdaki gibi ikinci parametresinide kullanırsak eğer oluşturulacak tablonun varsayılan(dbo) şeması yerine verilen değeri şema olarak belirtebilirsiniz.
class OkulDBContext : DbContext { public DbSet<Ogrenci> Ogrenciler { get; set; } public DbSet<Ogretmen> Ogretmenler { get; set; } public DbSet<Memur> Memurlar { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Ogrenci>().ToTable("Ogrenciler", "okul"); modelBuilder.Entity<Ogretmen>().ToTable("Ogretmenler", "okul"); modelBuilder.Entity<Memur>().ToTable("Memurlar", "okul"); } }
Kolon Özelliklerini Ayarlama
Tablolar oluşturulmadan nasıl araya girerek tablo adını ayarladıysak, aynı mantıkla kolonlar içinde ayarlama gerçekleştirebiliriz.
protected override void OnModelCreating(DbModelBuilder modelBuilder) { ... modelBuilder.Entity<Ogrenci>().Property(p => p.Adi) .HasColumnName("Adi") .HasColumnOrder(2) .HasMaxLength(30); ... }
Yukarıdaki örnek kod bloğunu incelerseniz eğer sadece Ogrenci tablosuna örneklendirme yapılmıştır. Örnek amaçlı “Adi” kolunu seçilmiş ve “HasColumnName” metodu ile adını, “HasColumnOrder” metodu ile sıralamasını ve “HasMaxLength” metodu ile de karakter sayısını belirtmiş oldum. Tabi burada örneklendirme amaçlı sınırlı metodlar seçilmiştir. Siz kurcalayarak daha geniş bilgi edinebilirsiniz.
Bu yazımızında sonuna gelmiş bulunmaktayız.
Gençay Yıldız ın tüm makalelerine bu linkten ulaşabilirsiniz.
Bu yazıya 0 yorum yapılmış.