C# Entity Configurations Classlibrary

C# içerisinde veri tabanı işlemlerimize devam ederken veri tabanımızdaki tablolarımızı nasıl özelleştirebileceğimizden bahsedeceğiz.

Özelleştirmek derken ne demek istediğimi hemen açayım, Örneğin veri tabanında bir tablonuzun içindeki bir kolonun karakter uzunluğunu 15 karakter uzunluğu vermek istiyorsunuz

Veya bir kolonun optional yani zorunlu değil olarak işaretlemek istiyorsunuz.

Şimdi bu işlemleri yapabilmek için öncelikle proje oluşturmamız gerekiyor

Hemen boş bir klasör açalım ve aşağıdaki kodları sırasıyla çalıştıralım.

evet burada gerekli tüm projelerimizi oluşturduk ve paketlerimizi ekledik şimdi de Entities adlı bir klasör oluşturalım ve altında Blog adında bir class oluşturalım.

Buradaki Blog classını aşağıdaki gibi düzenledim .

Buradaki işaretli satırlardaki Attribute lere property Attribute deniyor, ve bunlar DataAnnotations namespace’i altından gelmekte.

7. Satıra belirtilen Key Attribute’ü Id kolonunun Key olduğunu belirtir, efcore normalde otomatik olarak Id bulunan kolonları ayarlamaya çalışır örneğin Key attribute’ünü belirtmesek de otomatik olarak Key olarak ayarlanacaktı zaten. Aynı şekilde BlogId diye belirtsek ID diye de belirtsek bunları key olarak atayacaktır.

9. Satırdaki MaxLength satırı ise Title kolonunun karakter sayısının en fazla 50 olacağını belirtir.

Şimdi migration oluşturabilmek ve veri tabanını güncelleyebilmek adına bir adet Persistence klasörü ekleyelim sonrasında ise bu klasör altında iki adet class oluşturacağız bu classlar sırasıyla MyApiDbContext ve MyApiDbContextFactory olacak

Aşağıda kodları bulabilirsiniz.

buradaki iki sınıfı da ekledikten sonra veri tabanımızı aşağıdaki kodlar ile oluşturabiliriz.

Kodlarımızı çalıştırdıktan sonra eğer veri tabanı bağlantımız başarılı ise veri tabanımız oluşturulacaktır.

Sonrasında Blog adlı tabloya gittiğimizde aşağıdaki gibi bir görsel göreceğiz.

Burada dikkat etmenizi istediğim şey Title adlı kolonun Type’ı nvarchar ve Length değeri de 50’dir bunu yukarıda belirttiğimiz data Annotation ile sağladık

Unique Keys üzerine geldiğimizde ise Id kolonunun başarılı bir şekilde PrimaryKey olarak atandığını görebiliriz.

Tabi bu şekilde tablodaki kolonlara özellik verme yeteneğimiz bir tane değil bir tane daha yöntemi var adı da Fluent Api

Şimdi de fluent api ile bir konfigurasyon oluşturacağız, ben tüm konfigürasyonları burada yazamam, eğer detaylı bilgi arıyorsanız buradan ulaşabilirsiniz.

Fluent api ile konfigurasyon yapabilmek için Entities klasörü altında bir adet daha tablo oluşturuyoruz adına da BlogCategory diyelim kodlarını aşağıya bırakıyorum.

Gördüğünüz gibi burada herhangi bir data annotation geçmedim bunu yapacağımız yer farklı.

Klasörlerimizin daha düzenli olması adına Persistence klasörü altında Mappings adlı bir klasör oluşturalım.

Bunun altında da BlogCategoryConfiguration adında bir class oluşturalım.

Buradaki konfigürasyonları işaretlediğim satırlar ile gerçekleştiriyoruz

ToTable değeri veri tabanında oluşturulacak tablonun ismini belirtir

HasKey değeri ise [Key] data Annotation’u ile aynı şeyi yapmakta

Property fonksiyonu ile bir property seçebiliriz sonrasında ise seçtiğimiz propertylere özellik verebiliriz örneğin;

12. Satırda Id property’si için Veri tabanında eklenirken değer ata dedik böylelikle veri tabanı üzerine her değer eklendiğinde sayısı 1 artacak örneğin son eklenen satırın Id’değeri 1 ise bir sonraki 2 olacak

HasMaxLength ile Name isimli property’nin alabileceği karakter sayısını belirttik

IsRequired ile bu alanın null olamayacağını belirtiyoruz. (burada null dedim çünkü null ile boş değer farklı şeyler)

Şimdi buradaki oluşturduğumuz konfigürasyonun veri tabanımızın tanıması gerekmekte bunun için MyApiDbContext üzerinde biraz değişiklik yapmamız gerekmekte.

Burada işaretlediğim satırları yeni ekledim ve gördüğünüz gibi DbSet property’si ile BlogCategory adlı değeri eklemedim , buna rağmen efcore otomatik olarak ilgili Tabloyu bulup veri tabanı için map işlemini yapacaktır. Hadi şimdi bir migration daha alalım ve veri tabanımızı güncelleyelim

Görselde de gördüğünüz gibi BlogCategories adlı tablo oluştu sağ tarafta da görebileceğiniz üzere Name adlı kolonun karakter uzunluğu da 50 olarak ayarlanmış

Aynı şekilde Unique Keys adlı kısma baktığımızda ise Id Kolonunun Primary Key olarak ayarlandığını görebilirz.

Şimdi akıllarda bir soru işareti mevcut olmuş olabilir yani ben tüm veri tabanı tablolarım için gidip DbContext içerisinde ApplyConfiguration diyerek ilgili class’ı verip konfigurasyonları mı oluşturacağım?

Aslında buna gerek yok hadi bir adet daha tablo oluşturalım ve onu da yeni şekilde ekleyelim.

Entities altında BlogTag adlı bir class oluşturuyorum kodları aşağıdadır.

sonrasında ise bu oluşturduğumuz tablo için Configuration dosyasını üretmemiz gerekmekte

Persistence/Mappings altında gidip BlogTagConfiguration adlı bir class oluşturuyorum ve IEntitytypeConfiguration interface’inden türetiyorum. Kodları aşağıda.

sonrasında ise MyApiDbContext üzerinde değişiklik yapmamız gerekmekte hemen aşağıdaki şekilde güncelliyoruz.

Burada işaretli satırları günceledim, buradaki ApplyConfigurationFromAssembly adlı fonksiyon bizden bir adet Assembly istemektedir bu Assembly IEntityTypeConfiguration interface’inden türetilmiş veri tabanı tablolarımız için üretilen konfigürasyon dosyalarımızın bulunduğu assembly olmaktadır. Benim örneğim içerisinde tek bir proje mevcut ve Konfigürasyon dosyaları MyApiDbContext sınıfının assembly’si ile aynıdır.

Eğer proje farklı değil ise aynı proje içerisindeki herhangi bir class için typeof özelliğini kullanarak sınıfın bulunduğu assembly’i alabilirsiniz yukarıda da bunu yaptım.

Şimdi veri tabanını tekrar güncellediğimizde ise BlogTag ile ilgili ayarlarımızın da veri tabanımıza eklenmesi gerekmektedir. Aşağıdaki kodları çalıştırarak kontrol edelim.

Veri tabanımıza göz atalım

Gördüğünüz gibi blogTags tablosu oluşturulmuş ve Fluent Api ile verdiğimiz ayarlar da uygulanmış vaziyette

Emin olmak adına unique keys adlı alandan primary key’i de kontrol edelim.

PrimaryKey değerimiz de Id kolonu için ayarlanmış vaziyette

Bu yazımda da tablolarımız için konfigürasyonları nasıl yapabiliriz ona baktık sonra görüşmek üzere sağlıcakla kalın.

erdincyasan Yazar:

0 0 votes
Değerlendirme
guest
0 Yorum
Inline Feedbacks
View all comments