"/>"/>
Yazılım Dilleri
Asp.Net 4.5 Kitabı
Skip Navigation Links

Entity Framework Code First Nedir? Örnek Proje ile İnceleyelim

Entity Framework Code First nedir, örnek bir proje (Code First example) üzerinden Code ilk modeli oluşturalım.

Daha önce Entity Framework Database First yöntemiyle, var olan bir veritabanının modelini oluşturma ve sorgulama yapma işlemlerini incelemiştik. Konuyu tekrar hatırlamak veya göz atmak isteyen arkadaşlar için makale linklerini aşağıda tekrar paylaşıyorum.

Entity Framework kategorisi: http://www.ugurkizmaz.com/YazilimKategori-4-Entity-Framework.aspx

Entity Framework Model oluşturma: http://www.ugurkizmaz.com/YazilimMakale-774-Entity-Framework---Model-Olusturma.aspx

Bu örneğimizde Entity veri modelini Code First yöntemi ile oluşturmayı öğreneceğiz.

Entity Framework’e başladığım dönemlerde Database First yöntemi çok basit, Code First çok karmaşık geliyordu gözüme, bu yüzden çok ilgilenmemiştim açıkçası :) Fakat Code First’ü kullandıkça Entity Framework’ü daha çok sevmeye başladım. Çünkü bu yöntemle tüm kodun (modelin) hakimiyeti sizde oluyor ve istediğiniz gibi kullanabiliyorsunuz. Database First’te ise her şey hazır olarak geldiği için daha çok sürükle-bırak seven ve az kod > çok iş düşüncesindeki arkadalşar tarafından tercih edilmektedir.

Konuyu örnek bir proje üzerinde gerçekleştirelim. Projemizde bir alışveriş sitesindeki ürünler ve ürünlerin bulunduğu kategorileri veritabanına kaydedip sorgulayalım.

1. Visual Studio’da Console Application oluşturalım.

2. NuGet ile EntityFramework paketini projeye ekleyelim.

3. Oluşturduğumuz projeye MagazaContext isimli bir class dosyası ekleyelim.

4. MagazaContext dosyasını açalım ve namespace içerisine kategori ve ürün sınıflarını oluşturalım.

5. Kategori sınıfında KategoriId (int), Ad (string) (scalar) özellikleri yer alsın. Kategorinin içindeki ürünleri alabilmek için List<Urun> tipinde Urunler (navigation) özelliğini de ekleyelim (Urun sınıfını birazdan oluşturacağız). Urunler özelliğini, Entity Framework’ün Lazy Loading özelliğini kullanabilmek için virtual olarak tanımlıyoruz.

public class Kategori
{
    public int KategoriId { get; set; }
    public string Ad { get; set; }
        
    public virtual List<Urun> Urunler { get; set; }
}

6. Urun sınıfında UrunId (int), Ad (string), Fiyat (double), StokMiktar (int), KategoriId (int) (scalar) özellikleri yer alsın. Ürünün bağlı olduğu kategoriyi alabilmek için Kategori tipinde Kategori ismindeki (navigation) özelliğini de ekleyelim. Bu özelliği de virtual olarak tanımlıyoruz.

public class Urun
{
    public int UrunId { get; set; }
    public string Ad { get; set; }
    public double Fiyat { get; set; }
    public int StokMiktar { get; set; }
    public int UrunId { get; set; }
        
    public virtual Kategori Kategori { get; set; }
}

7. MagazaContext sınıfının kalıtımını Entity Framework’ün base typeı olan DbContext (System.Data.Entity.DbContext) sınıfından alalım. Bu sınıfın özelliği, veritabanı üzerinde oturum (session) işlemlerini gerçekleştirip oluşturulan oturumlar üzerinden işlemlerin yapılmasını sağlar.

public class MagazaContext : DbContext { }

8. MagazaContext sınıfında, veri türlerimizin (Urun ve Kategori) veritabanında CRUD işlemlerini gerçekleştirebilmek için Urunler (DbSet<Urun> tipinde) ve Kategoriler (DbSet<Kategori> tipinde)  isimli özelliklerimizi oluşturalım.

public class MagazaContext : DbContext
{
    public DbSet<Kategori> Kategoriler { get; set; }
    public DbSet<Urun> Urunler { get; set; }
}

9. MagazaContext sınıfını da oluşturduktan sonra Program > Main metodundan bir kaç kategori kaydı girelim: “Bilgisayar”, “Cep Telefonu”, “Televizyon

MagazaContext entity = new MagazaContext();

Kategori kategori1 = new Kategori() { Ad = "Bilgisayar" };
Kategori kategori2 = new Kategori() { Ad = "Cep Telefonu" };
Kategori kategori3 = new Kategori() { Ad = "Televizyon" };

entity.Kategoriler.Add(kategori1);
entity.Kategoriler.Add(kategori2);
entity.Kategoriler.Add(kategori3);

entity.SaveChanges();

10. Eklediğimiz kategorileri ekranda yazdıralım.

MagazaContext entity = new MagazaContext();
 
var kategoriler = entity.Kategoriler.OrderBy(k => k.Ad);
foreach (var kategori in kategoriler)
{
    Console.WriteLine(kategori.Ad);
}

Şimdiye kadar yaptığımız işlemleri gözden geçirelim:

  • Kategori sınıfını oluşturduk ve kategoriye bağlı ürünlerin alınabilmesini sağladık.
  • Urun sınıfını oluşturduk ve ürünün bağlı olduğu kategori bilgisini alabilmesini sağladık.
  • Veritabanı işlemleri için MagazaContext sınıfını oluşturduk.
  • 3 tane kategoriyi veritabanına ekledik.
  • Veritabanından eklediğimiz kategorileri çektik.

Her şey iyi güzel de, veritabanı nerede? :)

Veriler, Visual Studio 2012 ile çalışırken localdb’ye kaydedilir. Eğer Visual Studio 2010'da çalışıyorsanız SqlExpress’e kaydedilir. Entity Framework’ün proje çalışırken sunucuda veritabanı ve tabloların varlığını kontrol eder. Yoksa önce veritabanını ve tabloları oluşturur, sonra işlemleri yapmaya başlar. Verilere Visual Studio üzerinden ulaşabilmek için aşağıdaki adımları takip edelim.

1. Visual Studio > SQL Server Object Explorer üzerinden Add Sql Server butonuyla yeni bir SQL Server bağlantısı oluşturalım.

2. Server name (sunucu adı) bölümüne (localdb)\v11.0 yazalım (VS 2012 için) ve Connect butonuna tıklayalım.

3. Bağlantı oluştuğunda (localdb)\v11.0 altında veritabanı görünecektir (Bendeki örnek için Makale.EFCodeFirst_01.MagazaContext isimli veritabanı).

4. Eklediğimiz kategori verilerine erişebilmek için dbo.Kategoris tablosuna sağ tıklayıp View Data seçeneğini seçelim. Eklediğimiz veriler karşımıza gelecektir.

Sonraki makalelerimde (bu konu bir makale serisi olacak) Entity Framework (Code First) modeli yapılandırmayı ve Entity Framework ile Design Patternların nasıl kullanılacağını inceleyeceğiz.

 

Yepyeni makalelerde görüşmek dileğiyle :)

Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com

Yorumlar (1)

  1. Avatar
    Onur Aksoy

    15.01.2014

    Hocam ağzına sağlık çok güzel bir anlatım olmuş merak ettiğim bir konuydu vakit bulup bakamadım ancak inceleme fırsatım oldu çok sade ve kaliteli bir makale olmuş. dip not : App_Data klasörü oluşturma adımını atlamışsınız biraz orada takıldım.

Yorum Yap

Mail listesine katılmak için tıklayınız

Hakkımdaki son bilgilere anlık erişmek için mail listesine katılabilirsiniz.