ASP.NET Core Projelerine Code First Yaklaşımı ile DB Oluşturma

Okan Davut
4 min readNov 16, 2020

Arkadaşlar merhaba bu yazımda ASP.NET Core projelerinde code first yaklaşımını kullanarak EF-Core ile PostgreSQL üzerinde veritabanı ve tablo oluşturmaktan bahsedeceğim.

Code-First nedir?

Öncelikle code first yaklaşımının amacı kod ile oluşturduğunuz sınıfların veritabanı üzerinde oluşturulmasını sağlamaktır. Burada tablolarımızı sınıflar, içerisine eklediğimiz özellikleri (property) ise kolonlar olarak düşünebilirsiniz. İlişkileri ise sınıfların birbirleri içerisinde tanımlanmış özellikler olarak düşünebilirsiniz. Biliyorum biraz karmaşık oldu ancak kod örnekleri ile rahatça anlayacağınıza eminim.

Kurulum ve Gereklilikler

Veritabanı işlemleri için bilgisayarınıza PostgreSQL kurmanız gereklidir. Sonrasında PgAdmin içerisinden bir veritabanı oluştıralım.(https://www.postgresqltutorial.com/postgresql-create-database/) Veritabanı kurulumunu bu şekilde tamamlamış olduk. Kod tarafında ise aşağıdaki örnekte ben ASP.NET Core 3.1 ile bir Web API üzerinden anlatacağım.

Bunların yanı sıra migration işlemleri için Dotnet CLI kullanacağız. Dotnet CLI bilgisayarınızda kurulu olması gerekiyor. (https://docs.microsoft.com/tr-tr/ef/core/cli/dotnet)

Uygulama

Öncelikle ASP.NET Core 3.1 projemize aşağıdaki Nuget paketlerini eklemeniz gerekmektedir.

Buradaki paketlerden en altta olan Npsql.EntityFrameworkCore.PostgreSQL paketi tahmin edebileceğiniz gibi PostgreSQL veritabanı bağlantısı ve kullanımı için gereklidir. Bu kurulumların ardından aşağıdaki şekilde appsettings.json içerisine connection string tanımını yapıyoruz.

“DefaultConnection”: “User ID=postgres;Password=1234;Server=localhost;Port=5432;Database=ToursDb;Integrated Security=true;Pooling=true;”

Bu tanımın ardından, database nesnesi olarak kullanacağımız bir sınıf yaratıyoruz. Bu sınıf yaratılırken isimlendirme olarak genelde UygulamaAdıApplicationContext.cs şeklinde tanımlama yapılmaktadır.

Görmüş olduğunuz gibi Microsoft tanımlı sınıflarından olan DbContext sınıfından türeyen yeni bir context sınıfı oluşturduk ve contructor içerisinde base çağırımını yaptık.

Şimdi ise Startup.cs dosyasına gerekli eklemeleri yapalım. Burada ConfigureServices methodu içerisine DbContext tanımlıyoruz ve aynı zamanda bu db context hangi veritabanını kullanacak bunu belirtiyoruz.

Bu sayede aslında tanımladığımız DbContext kullanılmasını ve aynı zamanda json dosyasına eklediğimiz connection string ile PostgreSQL veritabanına bağlanmasını sağlıyoruz.

Şu ana kadar aslında genel yapıyı ve kurulumları tamamlamış olduk. Artık yapmamız gereken adım adım tablo olacak sınıfları oluşturmak. Aşağıda ilk veritabanı tablosu olan Tours tablosu için yarattığım sınıfı görebilirsiniz. Burada ben proje içerisinde Data -> Entities klasörü içerisine ekliyorum.

Bu sınıfta aslında Table[(“Tours”)] çağırımı ile beraber tablo adının ne olması gerektiğini de belirtmiş oluyoruz. İkinci tablomuz olan SoldTours için de aşağıdaki sınıfı yaratıyorum.

Burada tek farklı nokta aslında ToursEntity referansı ile eklediğimiz Tour nesnesi. Bu sayede aslında her bir satılan turun Tours tablosundaki bir nesne ile ilişkilendirilmesini sağlamış oluyoruz.

Son olarak en başta oluşturduğumuz UygulamaAdıDbContext.cs sınıfımız içerisine de bu 2 tablo için oluşturduğumuz sınıfı ekliyoruz.

Kod tarafındaki tüm yapacaklarımız bu kadar. Sıra geldi .NET CLI ile bunu PostgreSQL üzerindeki veritabanına aktarmaya. Komut satırınde projenin olduğu klasörde,

dotnet ef

komutunu çalıştırdığımızda aşağıdaki ekran gelecektir.

Burada gördüğünüz gibi 3 adet seçeneceğimiz var migrations, database ve dbcontext. Burada aslında migrations yarattığınız dbcontext üzerinden veritabanı oluşturmak için yaratılacak nesne için kullanılmaktadır.

Yeni bir migration oluşturma, varolanları listeleme veya silme aynı zaman da direk script olarak alma işlemlerinden birini yapabiliriz. Biz ilk defa oluşturacağımız için add diyoruz.

dotnet ef migrations add “Initial db operation”

Görmüş olduğunuz gibi list dediğimizde aslında yarattığımız migration listede görünmektedir. Aynı zamanda proje klasörü içerisinde Migrations isimli bir klasör oluştu.

Şimdi ise veritabanını güncellememiz gerekmektedir. Bunun için aşağıdaki komutu çalıştırıyoruz.

dotnet ef database update

Evet veritabanı update işlemi başarılı oldu. Son olarak tabloları veritabanı tarafında kontrol edelim.

pgAdmin üzerinden veritabanı içerisinde kontrol yaptığımızda aşağıdaki gibi tabloların oluştuğunu görebiliriz.

Aynı zamanda EFMigrationsHistory adında bir tablo daha oluştu. Bu tablo ise yapmış olduğunuz migration işlemlerinin kayıtlarını versiyonlanmış bir şekilde tutmaktadır.

Bununla beraber aslında C# ile oluşturduğumuz sınıfları code-first yaklaşımı ile veritabanı üzerinde oluşturduk.

Projeye Github hesabım üzerinden ulaşabilirsiniz. Aynı zamanda sorularınız için sosyal medya üzerinden veya mail ile her zaman bana ulaşabilirsiniz :)

Elimden geldiği kadar Code First yaklaşımının uygulama kısmını anlatmaya çalıştım. Okuduğunuz için teşekkür ederim, paylaşım ve alkışlar motivasyonu artıracaktır :)

--

--