entity framework etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
entity framework etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

24 Haziran 2015 Çarşamba

Code First Yaklaşımında Fake Data Kullanımı

Merhaba arkadaşlar,

Code First yaklaşımı bir model ürettiğimizde, bu model içerisinde aynı zamanda da veri oluşturmak işimize yarayabilir. Bu yazıda code first kullanarak içerisinde veri olan bir modeli nasıl oluşturacağımızdan bahsedeceğim.

Visual Studio'da bir WinForm projesi oluşturalım. Solution explorer penceresinden proje adına sağ tıklayıp "Manage NuGet Packages.. " seçeneğine tıklayalım. Açılan pencereden code first kullanımı için gerekli olan "Entity Framework" paketini indirelim.

Tasarım aşamasında ana formumuza sadece listbox ekleyelim. Daha sonra projemize "Kisi" isimli bir class ekleyip içerisine ID,Ad ve Soyad alanları ekleyelim. Ad ve Soyad alanları listbox içinde görüntülemek için de toString() metodunu override edelim.



 Kodumuza oluşturacağımız veritabanı context yapısı için KisiContext isimli bir class oluşturalım ve DbContext nesnesinden türetelim. Buraya DbSet<Kisi> tipinde property ekleyelim. FakeData ile veri oluşturmak için bize sunulan hazır bir paket bulunmaktadır. FakeData yardımıyla adres, telefon,yaş, tarih vb. verilerini kolaylıkla üretebilirsiniz. Manage NuGet Packages seçeneğiyle projemize FakeData paketini indirelim. Bu paket sayesinde örnek verilerimizi veritabanına basabiliriz. Bunun için bir KisiContext class yapısının içinde KisiOlusturucu isimli bir class oluşturalım ve miras almak için CreateDatabaseIfNotExists<KisiContext> kodunu kullanalım. Bu yapı ile bize class içerinde override edebileceğimiz InitializeDatabase ve Seed metotlarını kullanmamıza olanak sağlayacaktır. InitializeDatabase, database oluşurken çalışır. Seed metodu ise database oluşturulduktan sonra çalışır. FakeData oluşturmak için kuracağımız yapıyı Seed metodu içinde şu şekilde tanımlayacağız :


KisiContext yapısında oluşturduğumuz KisiOlusturucu kullanmak için şu şekilde tanımlayacağız :

Context içerisinde işlemimizi tamamladıktan sonra app.config içerisinde connection string ifadesini oluşturalım. Burada dikkat etmemiz gereken bu tanımlamanın configSections etiketinin dışında yapılmasıdır.


Formumuzun load olayına gidip context nesnemizi oluşturalım vev oluşturduğumuz verileri listbox ile gösterelim.

Bu işlemleri tamamladıktan sonra kodumuzu çalıştırabiliriz. Kodumuzu çalıştırdıktan sonra oluşan ekran görüntüsü şu şekilde olacaktır:



21 Haziran 2015 Pazar

Entity Framework - Partial Class Kullanımı

Merhaba arkadaşlar,

Entity Framework kullanacağımız bir desktop uygulaması yazdığımızı varsayalım. Projemize, Entity Framework ile bir data model oluşturup eklediğimizi ve daha sonra burada yer alan tüm class yapılarının ToString() metodunu override ettiğimizi düşünelim. Daha sonra oluşturduğumuz bu data modele bir tablo daha eklememiz gerektiğinde "Update Model from Database" seçeneğini kullanarak bir değişiklik yapabiliriz. Ama bu değişikliği yaptığımızda, ToString() eklediğimiz tüm class yapıları bu değişiklikten etkilenir. Çünkü entitiy framework ile oluşturulan classlar Auto Generated yapıdadır. Bu nedenle modeli güncellediğimizde yeniden oluşturulacak ve içerisine yazmış olduğumuz ToString() metodu da silinecektir. Peki bunun önüne nasıl geçebiliriz? Yaptığım bir değişikliğin update ile değişmesini nasıl engellerim? Burada yardımımıza partial class yetişiyor.

Partial class, adından da anlaşılacağı gibi oluşturduğumuz classın bir parçasıdır. Yapacağımız değişiklikleri modelle oluşan ana classlar içerisinde değil de kendi oluşturduğumuz bir partial class içerisinde yaparsak güncellemelerden etkilenmesini engellemiş oluruz.

Northwind ile bir data model oluşturalım ve içerisine "Categories ve Products" tablolarını ekleyelim. Her birinin classlarının içerisinde ToString() metodunu override edelim.






Bu işlemi yaptıktan sonra dosyaları kaydedelim ve oluşturduğumuz data model içine Customers tablosunu ekleyelim ve kaydedelim. Az önce ToString() metotlarını override ettiğimiz Categories ve Products classlarının içinde artık bu metodun olmadığını göreceksiniz. Şimdi bahsettiğmiz partial class yapısını kullalım. Projemize sağ tıklayıp modeldeki classlardan farklı isimlerde classlar ekleyelim. Categories için Category2, Products için de Product isimli 2 adet class oluşturalım. Bu classların içini aşağıdaki şekildeki gibi değiştirip kaydedelim.



Classları her ne kadar Category2 ve Product2 ismiyle oluşturmuş olsak da kod içerisinde yer alan class ismini data modelde yer alan isimler ile aynı yapmalıyız. Böylece hangi classın bir parçası olduğunu belirtebiliriz. Ayrıca namespace de yer alan ifadelerin de data modeldekiyle aynı olması gerekmektedir. Şekildeki değişiklikleri yaptıktan sonra data model içerisinden az önce eklediğmiz Customers tablosunu silip modeli kaydedelim.

Solution Explorer içerisinde az önce oluşturduğumuz Category2 ve Product2 classlarının hala durduğunu ve içlerinde yer alan ToString() metotlarında herhangi bir değişiklik olmadığını görebilirsiniz. Bu şekilde, güncellediğiniz modelde yaptığınız değişiklikleri rahatça koruyabilirsiniz.