Entity Framework – Code First OnModelCreating Metodu

Merhaba,

Entity Framework – Code First yapısına önceki yazılarımızda giriş yapmıştık. Önceki yazılara göz atmak için Entity Framework isimli kategoriye gitmeniz yeterlidir. 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.

Entity Framework - Code First OnModelCreating Metodu

Entity Framework – Code First OnModelCreating Metodu

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.

Entity Framework - Code First OnModelCreating Metodu

Entity Framework – Code First OnModelCreating Metodu

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");
        }
    }
Entity Framework - Code First OnModelCreating Metodu

Entity Framework – Code First OnModelCreating Metodu

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.

Entity Framework - Code First OnModelCreating Metodu

Entity Framework – Code First OnModelCreating Metodu

Bu yazımızında sonuna gelmiş bulunmaktayız.
Zahmet edip, okuduğunuz için teşekkür ederim…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.