Fluent Api Nedir?




Fluent Api Nedir?


Herkese merhabalar arkadaşlar size bu makalede Fluent Api nedir aldığı değerler nelerdir ve bize ne gibi kolaylıklar sağlıyor bunlar hakkında edindiğim bilgiler doğrultusunda size aktarmaya çalışacağım...

Arkadaşlar öncelikle bu yapı tamamen relations üzerine kurulmuş bir yapı diyebiliriz.Çünkü bu yapı tablolar arasındaki RDBMS(Relational DataBase Management System) ilişkileri konu alıyor.
Ne demek şimdi bu ?
Tablolar arasındaki ilişkiyi biraz açalım.
Oluşturduğumuz tablolar arasında belirli bir ilişki vardır.Temel olarak örnek vermek gerekirse one to one (bire bire ) ,one to many(birden çoğa),many to one(çoktan bire ) ve many to many(çoktan çoğa)ilişkileri vardır..


İşte bu ilişkiler arası iletişimi sağlayabilmemiz için Code First mimarisinde yer alan iki yapıdan(DataAnnonations-Fluent Api)

Fluent Api'yi kullanabilmemiz için DbContext sınıfının OnModelCreating yöntemini override (geçersiz kılmak) etmemiz gerekiyor.


Yukarıda görüldüğü şekilde projemizin DbContext dediğimiz daha önceden oluşturduğumuz Class'larımızı birleştirici niteliği taşıyan classımızda relationslarımızı bu iki scope{} arasına classlar arasında nasıl bir ilişki olmasını istiyorsak onu burada belirtiyoruz.

Örnek üzerinden aldığı parametreleri görelim...
Senaryomuz şöyle olsun...
Öğrenci ve Sinif adında iki adet classımız olsun.


Bu class'ların içeriğide şöyle olsun..



Not : Buradaki ilişki türümüzü one to many(bire çok) olarak ele alıyoruz. Yani 1 sınıfta birden fazla öğrenci bulunabilir.Ancak 1 öğrenci sadece 1 sınıfa ait olabilir.(İlkokul sınıfı gibi düşünebiliriz ;) )

Şimdi ise DbContext sınıfımızı OnModelCreating methodunuda ekleyerek oluşturalım.






Burada dikkat etmemiz gereken birkaç yer var onu açıklayayım hemen;

 public class OkulDbContext : DbContext

Kırmızı ile yazılmış olan yer EntityFramework'un Database ile ilgili sınıfı bunun eklemezsek DbSet yazdığımız yerdeki ,yani veritabaninda oluşacak tablolar oluşmaz.
Contructor methodumuzada isterseniz connectionString tanımlayabilirsiniz ancak ben oluşturduğum ConnectionStringimin ismini verdim onuda webconfig dosyasında oluşturdum:




Bunları yaptıktan sonra Package Manager Console'u açıp;

-> enable-migrations yazıp çalıştırıyoruz ki veritabanımızda yarın birgün değişiklik yapıldığında sunucudanda değiştirmesi için















Bu işlem başarıyla tamamlandıktan sonra Solution Exploer'imiza Migrations adlı klasör gelecek
bunun içindeki Configuration dosyasını açıp  AutomaticMigrationsEnabled = false; olan değeri true olarak değiştiriyoruz.







Veritabanımızın oluşması için son bir adım ise
yine aynı Package Manager Console'dan ;
update-database komutunu verdiğimizde projemizin veritabanı oluşmuş olacaktır.

Sql Server'dan kontrol edelim


Gördüğünüz gibi oluşmuş :)
Şimdi gelelim yukarıdaki OnModelCreating içerisinde yazdığımız propertyleri açıklayayım.


 modelBuilder.Entity<Ogrenci>() : -> ModelBuilder'in herhangi bir varlık sınıfıyla başlaması gerekir biz Ogrenci seçtik.

HasRequired<Sinif>(s => s.MevcutSinif) : Burada ise yukarıdaki seçili olan öğrenci classının bir Sinif varlık kümesine sahip olma zorunluluğunu bildiriyoruz.Yani her öğrencinin bir sınıfı olmak zorundadır bunun türkçesi.

.WithMany(g => g.Ogrenci) : Bu ise ilişkinin diğer tarafında gezinme özelliği olan bir özelliktir.Yani sınfın varlığının üzerinde gezinme yapabilmemizi sağlar.


 .HasForeignKey<int>(s => s.MevcutSinifId); Burada ise MevcutSinifId'yi ForeignKey olarak belirtiyoruz.


Yorumlar

Bu blogdaki popüler yayınlar

Data Annotation Nedir?

2 bitlik 2 sayıyı çarpma

Asp.Net Mvc 5 Çoklu Dil Desteği