İlk olarak bir Blank Solutuion Oluşturuyoruz.

Projemize ben EC Pro App ismini verdim ve OK dedim.

Bizi boş bir Solution Ekranı Karşılayacak. Şimdi adım adım klasörlerimizi sonrada proje library lerimizi ekleyerek devam edeceğiz.

 

Solution Üzerine Sağ Tıkla >> Add >> New Solution Folder ve eklediğiniz Folder’a isim vereceğiz.

 

Aşağıdaki gibi 4 Folder ekleyip gördüğünüz şekliyle isimlerindirebilirsiniz.

 

 

Bu Dört Katmanımızı oluşturduysak şimdi her katmanımıza bir Class Library yani bir proje ekleyeceğiz.

Oluşturduğumuz Klasör üzerine gelip Sağ Tıklıyoruz >> Add >> New Project diyoruz. Add Project Sayfasına bizi yönlendirecek.

 

Bu kısımda görüntüde gördüklerinizi aynen uyguladığınızda bir Proje yani Class Library oluşturmuş oluyorsunuz.

Oluşturulan Class Library nin en önemli özeliği başka projelerinize Import edebilmeniz ve kullanabilmenizdir.

 

Siz Yeni Projeyi eklediğinizde standart olarak Class1.cs dosyası oluşturulur. Bu Class Dosyasını üzerine Sağ Tıklayıp >> Delete diyoruz.

Gördüğümüz gibi sildik.

 

Şimdi sırayla diğer klasörlerimize aynı işlemi yaparak yeni bir Class Library ekleyelim.

Proje Dosyalarımızın İsimlerini Sırayla Yazacak Olursam

ECPro.Entity – ECPro.Data – ECPro.Business – ECPro.UI

Gelin biraz bu katmanların ne işler yapacağından bahsedelim. Code First’de Veritabanı tablolalarımıza karşılık gelen Entityler yani varlıklar DOMAIN katmanında tutulacak.

Yani şöyle örnek verelim.

SQL üzerinde veritabanınız üzerinde bir tablo oluşturdunuz diyelim. İsmi de Personal olsun. İşte bu tablomuuzun Code olarak tanımlamasını yapacağımız yer DOMAIN katmanı olacak.

DATA katmanı ise Migration, Context ve CRUD işlemlerimizin olduğu sınıfları içerecek.

Business

UI

Şimdi öncelikle gelin yapacağımız projenin Tablolarını ilişkişlerini öncelikle Paint üzerinde çizelim.

Projemizde 4 adet tablomuz var

DERS

ÖĞRENCİ

SINIF

ÖĞRETMEN

Aralarındaki ilişki mantığını anlamaya çalışalım.

DERS Tablosu ile Öğrenci Tablosunu ele alırsak yorumlama şeklimiz şu olacak;

Bir Dersi birden fazla Öğrenci Alabilir aynı zamanda 1 Öğrenci Birden Fazla Ders Alabilir yani buradan anlayacağımız üzere

ÇOKA ÇOK bir ilişki vardır.

Diğer Tablo Bağlantıları Anlatılacak.

DOMAIN Katmanına Entitylerimizi oluşturalım.

DOMAIN katmanındaki Projemiz üzerine Sağ Tıklayıp >> Add >> Class diyoruz.

Resimde belirtildiği Class seçili gelecek. Classımıza tablomuzun ismini veriyoruz. İngilizce olarak yapmakta her zaman fayda olduğunu düşünüyorum. O yüzden Öğrenci tablomuz için Student.cs Classını oluşturalım.

 

Class oluşturulduğunda public erişim belirteci ile beraber gelmez. Bu sınıfın tüm projede erişilebilir hale getirmek için public belirtecini ekliyoruz.

 

 

Burada kodlarla alakalı bir kaç özelliği belirtmekte fayda var.

Not: Kod ekranında Prop yazar iki kere TAB+TAB yaparsanız sizin için şöyle bir yapıyı otomatik oluşturacaktır.

Bu yapı oluştuktan sonra üzerinde istediğiniz değişikliği yapabilirsiniz. Oluşturacağınız Property’nin türünü ve ismini değiştirebilirsiniz. Get ve Set Kapsülleme işlemi için vardır.

 

Bir Entity oluştururken Property adının ID yada ClassnameID olan Property i EF otomatik olarak PrimeryKey olarak algılar ve atamasını yapar.

Yani yukarıdaki kodlarda da gördünüz gibi ID olarak yazsaydım o PK olacaktı. Yada Sınıfın ismi olan Student ismine ID ekleseydim o PK olacaktı.

Soru: PK yı kendim farklı bir Property’e set edemem mi?

Tabi ki edebilirsiniz. Bunun için yapmanız gereken işlem şu olacaktı.

PK olacak Property’nin üzerine [KEY] yazmanız yeterli olacaktır. Ancak SS üzerinde de gördüğünüz gibi KEY altı kırmızı ile seçili eksik bir şeyler var.

Bu yapılacak işlem Entity Framework(EF) kütüphanesinden yönetildiği için bu projemize EF nin son sürümünü yüklememiz gerekmektedir.

NUGET PACKAGE MANAGER Kullanarak Projeye İnternet Üzerinden Package Yükleme

NUGET Manager Visual Studio projelerinize internet üzerinden dosya indirme ve yükleme eklentisi. Projelerimizde kullanabileceğimiz pek çok Package’ı geliştiriyorlar sürekli. Bunlara NUGET üzerinden erişim sağlayıp projemize dahil edebiliyoruz.

Şimdi yapmamız gerekenlere geçelim.

DOMAIN katmanında Projemize Sağ Tıklayalım >> Manage NuGet Packages…

Adım Adım Resimleri Takip ederek EF’yi kurabilirsiniz.

Projemize EF yi eklediğimize göre Şimdi KEY de var olan hatamıza bir daha göz atalım.

Hala hatanın durduğunu görüyoruz. Çünkü gerekli DLL i hala using diyerek projemize dahil etmedik.

KEY belirtecini yöneten kütüphanemiz şudur;

Bunu eklediğimizde hatanın giderildiğini göreceksiniz.

Ancak böyle durumlarda kodu hatırlayıp hangi kütüphaneye ait olduğunu hatırlamayabiliriz. Böyle durumlarda Kırmızı çizili kodun üzerine bir süre gidip beklediğimiz de hemen SOL tarafında bir Ampul belirir. Yan tarafındaki OK a tıklayarak olası çözümleri görebiliriz.

Gördüğümüz gibi hangi kütüphane eklenirse çözüleceğini söylüyor. O düzeltmenin üzerine çift tıkladığınızda sizin için otomatik olarak bu kütüphanenin eklediğini göreceksiniz.

Şimdi diğer Entitylerimizi aynı şekilde sırayla oluşturalım.

ForeignKey lerimizi oluşturmadan ilk tablo hallerine bir bakalım.

Student.cs

Lesson.cs

Instructor.cs

Classroom.cs

Şimdi sıra geldi tablo ilişkilerimizi kod ile oluşturmaya. Ben sizlere basit olan yöntemi anlatmaya çalışacağım.

İlk olarak Student classımızı ele alalım.

İlk tablo ilişkilerimizi oluşturduğumuz çizimimize bir göz atalım.

Öğrenci ile Ders arasında ÇÇ

Öğrenci İle Sınıf Arasında TÇ

ilişki mevcuttur.

Çoka çok olmasının anlamı nedir?

1 Öğrenci 1 Den Fazla Ders Alabilirken.

1 Dersi 1 Den Fazla Öğrenci De alabilir.

Şimdi Student.cs dosyamızı açalım ve şu kodu ekleyelim.

Bu kod standart bir kodlama olup Öğrencinin dersle olan ÇÇ ilişkisini anlatır. ICollection yerine List de yazabilirdiniz. Ancak zaten List ICollection dan kalıtım aldığı için bir şey değişmeyecektir.

Bir ICollection property’si oluşturduk. Bağlantılı olduğu tablo ne ise onu ICollectiona parametre olarak verdik.

Yorumlamamız aynen şu şekilde olmaktadır. 1 Öğrencinin 1 den Fazla Dersi olabilir. Bu derside ancak bir liste ile alabiliriz. O zaman ICollection yada List kullanalım.

Şimdi TÇ ilişkide olduğu sınıf tablosu ile bağlantısını oluşturalım.

Sadece bir sınıf oluşturarak bu TÇ ilişkiyi gösterebildik.

Yorumlamasına bakacak olursanız 1 Öğrenci Sadece 1 Sınıfta bulunabilir. O yüzden alınabilecek herhangi bir toplu değer olmadığı için sadece bir sınıf tanımlaması ile bunu gerçekleştirdik.

Şimdi Student Class ı için bir Constructor oluşturalım. Kodlamamızı görüp açıklaması ile devam edelim.