Erdinç Yaşan

C# EntityFramework Core Migrations

Selamlar bu yazımda migrations işlemlerini anlatacağım fakat geçmeden önce geçen yazımdaki ufak bir yanlışı düzeltmek istedim, eğer yazının tamamını okuduysanız hatırlarsınız ki dbContext’i builder.Services içerisine iki farklı şekilde eklemiştik sanki sadece services.AddDbContext<MyDbContext>() dedikten sonra constructor içerisinde türetemiyormuşuz gibi bir şey dememişim fakat sonraki açıklamalarım bu şekilde anlaşılmaya yol açabileceği için onu düzeltmek istedim. db context objesi services’e eklendikten sonra constructor’lar içerisinde çağırılabilir.

Her neyse şimdi gelelim migrations işlemlerine fakat ondan önce migrations nedir onu bi açmak isterim.

Normalde eğer dbFirst işlemi yapıyorsanız yani veri tabanınızı önceden hazırlayıp sonra dbContext ile işlemler yapacaksanız migrations’lara ihtiyacınız yok fakat siz veri tabanında tablolarınızı elle oluşturmak istemiyorsanız sadece c# classlarını yaparak bunu yapabilirsiniz.

Migrations aslında bunların takibini yapmak için var örneğin bizim eklemiş olduğumuz DbSet objesine bir bakalım.

işaretlediğim satıra dikkatli bakarsanız DbContext içerisinde bir Blog dbSet’i oluşturulmuş bu aslında şu demek benim veri tabanımda Blogs adlı bir tablom olacak ve bu tablomdaki kolonlar Blog sınıfı içerisindeki property’ler olacak hemen gidelim bakalım kolonlarımız ne olacakmış

Gördüğünüz gibi blog sınıfı içerisinde 4 adet property mevcut ve bunun içerisinde Id Url Tİtle ve Content değerleri var bunlar tablomuzdaki kolonlarımız olacak.

Normalde Migration oluşturmak için Visual Studio içerisinde Package Manager Console kullanılır fakat ben onu kullanmayı tercih etmiyorum.

Dotnet cli aracını çıkardığından beri sürekli geliştiriyor ve tool’lar ekliyor bu tool’ların içerisine hemen ef ile işlem yapabileceğimiz tool’u ekleyelim

yukarıdaki kodu yapıştırdığınızda aşağıdaki gibi bir sonuç alacaksınız

gördüğünüz gibi bir adet dotnet-ef tool’umuz mevcut bunu kurmamız gerekiyor ben genelde bu tool’u tüm projelerimde kullanacağım için global olarak kuruyorum aşağıdaki komutu kullanarak dotnet ef tool’unu kuralım

Bu şekilde kurduktan sonra migration oluşturma adımımıza başlayabiliriz.

Projemizin bulunduğu konuma gidin ve aşağıdaki kodu orada çalıştırın.

bu kodu çalıştırdığınızda ismi Init olan bir migration oluşturmaya çalışacak fakat projeniz içerisinde Microsoft.EnityFrameworkCore.Design paketi bulunmadığı için oluşturamayacak burada aslında şunu demek istiyor. Benim veri tabanı kodlarını oluşturan paketim design paketi sen bunu yükle ki ben sana kolaylık veri tabanı kodlarını üretebileyim.

Hemen ok diyoruz ve aşağıdaki kodu çalıştırıyoruz

.

Bu kodu çalıştırdıktan sonra paket projemize yüklenmiş olacak, hemen tekrar migration oluşturma kodunu çalıştıralım

terminalde en son bu şekilde bir çıktı görmemiz lazım burada başarılı bir şekilde oluşturulduğunu görebiliriz. yanında yazdığı mesaj ise son oluşturulan migration’ı silmek için çalıştıracağımız kod eğer silmek istersek tabi

İşlem başarılı bir şekilde tamamlandıktan sonra Migrations adında bir klasör oluşacak bu klasör içerisinde oluşturulan migrations’ları görebiliriz, isterseniz elle de müdahale edebilirsiniz fakat ben kesinlikle önermiyorum.

Şimdi sıra kaldı veri tabanımızı oluşturmaya, veri tabanınızdaki verileri görüntülemek için herhangi bir db browser kullanabilirsiniz ben dbeaver kullanıyorum sizlere de tavsiye ederim.

Şimdi migration oluşturduk fakat veri tabanı sunucumuzda bir veri tabanı ve tablo oluşturmadık öncelikle oluşturma işlemini yapalım

Yine projeniz içerisinde yukarıdaki kodu çalıştırırsanız veri tabanınızı oluşturacaktır.

yukarıdaki fotoğrafta işaretlediğim alana dikkatli bakarsanız oluşturduğumuz migrations’ı uygulamakta olduğunu söylüyor yani bu şu demek siz bir veri tabanını güncellemeden önce sırayla 2,3 defa migration alırsanız bunları sırasıyla uygulayacak.

Bakalım veri tabanımıza…

Veri tabanımıza bağlandığımızda blogs tablomuzun oluştuğunu görüyoruz fakat en altta __EFMigrationsHistory adlı bir tablo daha var o da ne ki ?

içerisine girip data’ları incelediğimizde

MigrationId ve hangi versiyon olduğu mevcut yani uygulanan migration’lar var. Buradaki migration history’e bakarak database update dediğimizde sadece uygulanmaya migration’ları uygulayacak hemen deneyelim gidelim ve database update işlemi yapalım.

Ben şahsen bu uyarıyı aldım, yani uygulanabilecek bir migration olmadığını söyledi

Şimdi gelelim Blogs tablomuza…

Blogs tablomuzun içeriğine baktığımızda ise bizim Blog class’ımızda bulunan 4 adet property’nin mevcut olduğunu görebiliriz.

Yani işin özü şu.. Eğer siz blog class’ınıza yeni bir parametre eklerseniz örneğin şu şekilde değiştirelim.

Gördüğünüz gibi 8. satıra bir author değeri ekledim şimdi yapmam gereken bunu veri tabanına kaydetmek. Önce migration almamız lazım.

Yukarıdaki kodu çalıştırdığımızda bir migration daha eklemiş oluyoruz migration oluşturduğumuza göre şimdi de gidip veri tabanımızı güncelleyelim.

kodunu çalıştırdığımızda ve veri tabanımıza tekrardan göz attığımızda

Author property’sinin eklendiğini görüyoruz yani veri tabanı güncelleme işlemimiz başarılı.

Bu yazımda projemiz c# dotnet projemiz içerisinde veri tabanımız için nasıl migration alabiliriz ve veritabanını code first ile oluşturabiliriz ona baktık. Sonraki yazımda görüşmek ise esen kalın.

Exit mobile version