Entity Framework ve Code First Mimarisi – 3

Entity Framework ve Code First Mimarisi – 3

 10.7.2017 00:32:40  MVC 5  (0)

Bir önceki yazımızda veritabanında oluşan tablolarda birtakım sorunlar, ya da düzeltilmesi gereken durumlar keşfetmiştik. Bunlardan birincisi tabloların isimlerinin sonunda -s takısı olmasıydı. Bunu Entity Framework kendisi eklemekte, biz class isimlerini Türkçe olarak yazdık, İngilizce olarak yazıldığı zaman kolaylık olması ve güzel görünmesi açısından Entity Framework böyle bir güzellik yapmak istemiş. Fakat biz bu -s takılarını istemiyoruz.

Daha önce ne demiştik? Bizim context sınıfımız var demiştik, bu context sınıfı veritabanı yönetimi için merkez noktasıydı. Ben veritabanı tablolarında ve diğer veritabanı işlemlerinde gerek gördüğüm düzenleme emirlerini buradan vermek istiyorum. Miras aldığımız DbContext sınıfında OnModelCreating() adında bir metot var. Bu metot veritabanımız oluşturulurken içerisine yazılan kodları çalıştırarak ona göre veritabanımızı inşa etmekte. OnModelCreating() metodunu context sınıfımda eziyorum(override) ve orada -s takısını silmek için aşağıdaki kodu yazıyorum.

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

CodeFirstContext sınııfmın son durumu aşağıdaki gibidir.

 

 

Kırmızı alan içerisine almış olduğum kod bloğunu siz de projenize yazımız. Burada Remove<>()içerisine PluralizingTableNameConvention diyerek tablolardaki -s takısını kaldırmasını söylüyoruz. Bu değişiklikleri yaptıktan sonra Package Manager Console ekranımızı açıp update-database komutunu veriyoruz.

update-database

Bu değişikliklerden sonra veritabanımızdaki tablolarda -s takısı silinmiş mi açarak değişiklikleri görebiliriz. Bu değişikliklerden sonra bir diğer yapmamız gereken şey ise Personel tablosunda UnvanID ile sütununu Unvan tablosundaki Id sütunu ile ilişkilendirmek. Veritabanında Foreign Keyilişkilendirmesi yapan arkadaşlar bunu bilir, bilmeyen arkadaşlar da internetten arayarak ulaşabilir.

Personel.cs adlı classımızda UnvanID adında bir property’miz vardı. Bunun Unvan sınıfındaki Id ile ilişkilendirilmesi gerekiyor, burada Attribute lardan faydalanacağız. UnvanID bizim foreign key sütunumuz olacak, o sebeple UnvanID tanımı yaptığımız satırın başına [ForeignKey(“Unvan”)]yazıyorum.

[ForeignKey(“Unvan”)]

Yalnız bu attribute u kullanmak için using bloğuna aşağıdaki kodu ekliyoruz;

using System.ComponentModel.DataAnnotations.Schema;

Sınıfımızın son hali aşağıdaki gibidir.

Diğer bir konu ise tablolarımızın sütunları varchar(max) olarak ayarlanmış. Bu veritabanımızda gereksiz yer kaplayacak ve bu şekilde yazmanın şu aşamada bize bir artısı yok. Bu durum tüm tablolarımızda olduğu için her tablo için bir eşleşme, haritalama gibi düşünebileceğimiz bir sınıfımız olmalı. Bu yüzden Models klasörü altına Mappings adında bir klasör oluşturup Personel ve Unvan sınıfları için PersonelMap ve UnvanMap adında iki adet sınıf oluşturuyorum. Bu sınıflar da EntityTypeConfiguration<> generic sınıfından miras almasını söylüyoruz. Personel sınıfının map sınıfı aşağıda gördüğünüz gibi, kodları satır satır anlatmak anlamanıza yardımcı olacağından adım adım anlatmayı tercih ediyorum.

 

Yeşil olarak numaralandırdığım using bloklarında EntityTypeConfiguration<> ve kendi sınıflarımızı kullanabilmek için projeye dahil ediyoruz.

Dikkat etmeniz gereken kodlarımızı constructor içinde yazdığımızdır. Kırmızı alanla işaretlediğim alanlardan 2 numaralı satır da ToTable() metodu ile tablomuza burada özel isim vermek istersek verebiliriz. Ben burada Personel adını verdim veritabanında herhangi bir değişiklik olmayacaktır fakat görmeniz açısından ekledim.
3 numaralı kısımda ise Property() metodunu kullanarak sütunlarımızın maksimum karakter uzunluğunu verdim.
4 numaralı kısımda ise o sütunun gerekli olduğunu yani null olamayacağını söylüyorum.
5 numaralı yerde de tahmin edeceğiniz üzere null olabileceğini belirtiyorum.

Bu değişiklikleri yine CodeFirstContext sınıfımda belirtmem gerekiyor ki ne gibi değişiklikler olacağını context sınıfım bilsin. OnModelCreating() metodunu ezdiğimizi daha önce söylemiştik, şimdi o metodun içine bu map sınıflarını söylememiz gerekiyor. Aşağıdaki satırları metoda ekliyorum.

modelBuilder.Configurations.Add(new PersonelMap());
modelBuilder.Configurations.Add(new UnvanMap());

Şimdi tekrar projemizde yaptığımız değişiklikleri görmek için Package Manager Console ekranında update-database komutunu vermeliyiz, fakat update-database dediğinizde hata alabilirsiniz -forceekini eklemeniz gerekmektedir. -force ekleyerek değişiklikleri zoraki yaptırınız.

update-database -force

Değişiklikleri yaptığınız zaman veritabanınızı açarak yapmış olduğunuz değişikliklerin veritabanınıza yansımış olduğunu görebilirsiniz.

 Etiketler:

 Yorumlar

Yorum Gönder 

 Facebook Profil