Code-First vs Database-First

Yafeshan Ünal
5 min readAug 10, 2022

--

Herkese merhaba bu yazımda .Net ile çokça kullandığımız, Code-First (Önce Kod) ve Database-First (Önce Veritabanı) yaklaşımlarını ele almaya çalışacağım keyifli okumalar dilerim.

Code-First

Code First

Code-First yaklaşımı etki alanı sınıflarınıza dayalı olarak kavramsal bir modeli otomatik olarak yapılandıran varsayılan kurallar kümesidir.

Bu tanımı biraz daha anlaşılır kılalım. Code-first yaklaşımının esas amacı veritabanında manuel olarak her hangi bir işlem yapmadan, yazdığımız kod blokları üzerinden veritabanını oluşturmaktır.

Oluşturduğumuz veritabanına tablolar, sütunlar gibi aklınıza gelebilecek bir çok özelliği yazdığınız kod özelinde eklemeler yapar. Eklenen özelliklerin manuel işlemlere ihtiyaç duymaması sebebiyle daha otomatize edilmiş bir veritabanı yönetimi sağlar.

Code-First yaklaşımının ne olduğunu öğrendiysek kodlar üzerinden basit bir Code-first methodu oluşturalım.

Code-First Uygulaması

İlk olarak yapmamız gereken entity frameworkü yüklemek

Terminale bu komutu girerek yükleme işlemini yapıyoruz:

dotnet add package Microsoft.EntityFrameworkCore --version 7.0.0-preview.7.22376.2

Entity framework yüklendikten sonra varlık sınıfımızı oluşturuyoruz.

Yukarıdaki örnekte görebileceğiniz gibi Key niteliği, Category varlık sınıfının CategoryId özelliğine uygulanır. Bu, varsayılan kuralları geçersiz kılar ve veritabanındaki Categoriler tablosunda CategoriId adında birincil anahtar sütunu oluşturur.

Varlık sınıfı hazır sırada veritabanına bağalntı işlemleri için DatabaseContext sınıfını oluşturmak var.

Bağlantılarımız hazır son olarak migrations yardımıyla veritabanı kodlarını oluşturmamız gerekiyor. Terminale şu komutu giriyoruz:

dotnet add migrations add MigrationName

Migrations bizim için kodları hazırlıyor:

Değişkenlerimizi ve diğer özellikleri ekliyor:

Bağlantı stringimizi appsettings.json da kaydedelim:

Ve Startup.cs de DbContext ile birleştirelim:

İşlemlerimiz tamam artık geriye SqlServer’a gidip kontrol etmek kaldı

Ve işlem tamam Code-First yaklaşımım ile veritabanımızı oluşturduk sırada ikinci yaklaşımımız olan Database-First var.

Database-First

Database-First yaklaşımı, varlık veri modeline yönelik Code-First ve Model-First yaklaşımlarına bir alternatif sunar. Projedeki veri tabanı üzerinden model kodları (sınıflar, özellikler, DbContext vb.) oluşturur ve bu sınıfların veri tabanı ile kontrol edilmesini sağlar.

Database-First yaklaşımının ne olduğunu öğrendiysek kodlar üzerinden basit bir Database-first methodu oluşturalım.

Database-First Uygulaması

Basit bir örnek ile uygulamamızı anlatalım. Aşağıdaki resimde gösterildiği gibi 3 tablo içeren bir veritabanımız halihazırda zaten var.

DatabaseFirstDemo isimli bir konsol uygulaması oluşturalım sonra Modeli oluşturmak için, öncelikle Solution Explorer’da konsol projenize sağ tıklayın ve Add → New Items… öğesini seçin.

Orta bölmeden ADO.NET Entity Data Model’i seçin ve Name alanına DatabaseFirstModel adını girin.

Varlık Veri Modelini başlatmak için Ekle düğmesine tıklayın.

Veritabanından EF Designer from database’i seçin ve İleri düğmesine tıklayın.

Makinenizde var olan veritabanınızı seçin ve bağlantı işlemlerini doğru bir biçimde yaptığınızdan emin olun.

Entity Framework 6.x’i seçin ve İleri’ye tıklayın.

Projenize dahil etmek istediğiniz tüm tabloları seçin ve Bitir’e tıklayın.

Entity model ve POCO sınıflarının veritabanından oluşturulduğunu göreceksiniz.

Database-First yaklaşımını kullanarak nasıl uygulama geliştireceğimizi öğrendik gelin şimdi Code-First vs Database-First karşılaştırması yapalım.

Code-First

Avantajlar

  1. Tablolardaki herhangi bir değişiklik için veritabanına bakmamıza gerek yok, çünkü varlık sınıflarında bunları yapabilirizsiniz ve bunlar eşzamanlı olarak veritabanına taşınacaktır.
  2. Tüm değişiklikler, gerektiğinde herhangi bir sürüme geri dönebilmemiz için veritabanında izlenecektir.
  3. Çok fazla veritabanı bilgisi olmayan bir programcı kolaylıkla veritabanı işlemlerine uyum sağlar bu da size bir hayli zaman kazandırır.
  4. Veritabanında veri kaybı olmadan değişiklik yapabilir (bu özellik EF 4.3 ve üst sürümlerinde geçerlidir).

Dezavantajları

  1. 100'lerce tablo varsa, etki alanı modellerini manuel olarak oluşturmamız gerekir.
  2. Veritabanında yapılan herhangi bir değişiklik varsa, uygulamadaki varlıklara yansımayacaktır.
  3. Migrations sırasında kod yazabilecek kadar iyi C# bilgisine sahip olmalıdır.
  4. Veri bakımından yoğun uygulamalar için tercih edilmez.

Database-First

Avantajlar

  1. Etki Alanı Modelleri oluşturmak kolaydır, çünkü bu, T4 komut dosyası kullanılarak bir edmx dosyası oluşturulurken otomatik olarak oluşturulacaktır.
  2. Visual Studio, aracılığıyla veritabanını yapılandırmak ve eklemek için GUI sağlar. Edmx dosyası.
  3. Daha büyük ve karışık uygulamalar için iyidir.
  4. Veritabanı tarafındaki herhangi bir değişiklik, uygulama sonunda tek bir tıklama ile kolayca güncellenebilir.
  5. Mevcut bir veritabanını kullanabilir.

Dezavantajları

  1. Veritabanı tablolarına dayalı olarak, edmx dosyalarıda büyümeye devam edecektir.
  2. İlişkilendirmeler, yabancı anahtarlar, kısıtlamalar oluşturmak/yönetmek daha zor olacaktır.
  3. Veritabanı büyükse, edmx dosyasının bakımı veya güncellenmesi kolay değildir.

Bu yazımızda Code-First ve Database-First yaklaşımlarının .Net özelinde nasıl kullanılacağını avantaj ve dezavantajlarını öğrenmiş olduk umarım faydalı bir yazı olmuştur.

Her hangi bir sorunuz olursa çekinmeden benimle iletişime geçebilirsiniz. Twitter, Linkedin

Esen kalmanız dileğiyle :)

Kaynakça

https://www.entityframeworktutorial.net/

--

--

Yafeshan Ünal
Yafeshan Ünal

Written by Yafeshan Ünal

KTÜN Bilgisayar Mühendisliği

No responses yet