Entity Framework Data First Örnekli Anlatım

ENTITY FRAMEWORK NEDİR? ÖRNEKLİ ANLATIM(C#)

Merhaba arkadaşlar bu yazımda sizlere Entity Framework nedir? Yöntemleri nelerdir bu yöntemlerden bir tanesi olan DataBase First yöntemi üzerinden nasıl kullanılabilir sorularını visual studio IDE’si üzerinden C# dilini kullanarak anlatacağım. Bu anlatımı elimden geldiğince OOP’ye uygun ve linq yöntemlerini kullanarak yapacağım.

Örneğimize geçmeden önce kısaca Entity Framework nedir?  Ve daha iyi anlaşılması için ayrıca ORM NEDİR? Konularına değinelim.

1-   ORM NEDİR? NEDEN TERCİH EDİLİR?

Projelerimizde genelde verilerimizi bir ilişkisel veri tabanı üzerinde tutar ve OO(Nesneye Yönelik Programlama) standardına uygun yazdığımız kodlarımız üzerinden bu verilere erişim sağlarız, ORM ise bu erişim esnasında köprü görevi gören ve ilişkisel veri tabanındaki verilerimizi yönetmek için nesne modellerimizi kullandığımız bir tekniktir. Yani ORM veri tabanı tablolarına nesneler üzerinden erişip ekleme, silme, listeleme ve güncelleme yani CRUD işlemlerini yapabildiğimiz bir tekniktir.
ORM, klasik Ado.Net’ten farklı olarak bize hızlı kod yazma kolaylığı sağlar, buna şöyle bir örnek verebiliriz.

İd değerini bildiğimiz bir veriyi Ado.Net ile çağırmak için aşağıdaki kodu kullanırız.

string sql = “SELECT FirstName FROM Accounts WHERE Id = 7”;
DbCommand cmd = new DbCommand(connection, sql);           
Result result = cmd.Execute();           
string firstName = result[0][“FirstName”];           
bu kod karmaşıklığı arttırır ve bizi sql kodu yazmaya zorlar.

ORM tabanlı bir yapıda ise aynı işlemi aşağıdaki gibi yapabiliriz.

  Account kullanici = repository.GetAccount(7);  
string isim= kullanici.FirstName;

ORM kullanarak hem kod karmaşıklığı ortadan kalkar, zaman kazanırız hemde Sql kodu yazmak zorunda kalmayız.

Programlama dillerinin kendilerine ait ORM framework’leri bulunmaktadır.

Dillerine göre sık kullanılan ORM çeşitleri

  • C#: Entity Framework,  Dapper, ECO, XPO, Norm
  • Java: Hibernate, Ebean, Torque, JPA,MyBattis
  • Php: CakePHP, Codelgniter, RedBean, Doctrine,Propel, PdoMap
  • Python: Django, South,Storm

Bizde bu yazımızda C# dilinde sık kullanılan ORM yöntemlerinden Entity Framework yöntemini işleyeceğiz.

2-   ENTITY FRAMEWORK NEDİR?

Entity Framework yaygın kullanılan ORM araçlarından biridir ve Ado.Net altyapısını kullanmaktadır. Microsoft’un verilere erişim için tasarlamış olduğu  Ado.Net yerini yavaş yavaş ORM teknolojilerine bırakmaktadır, Ado.Net kullanmanız demek sql sorgularını yazmak zorunda kalmanız ve tüm veri tabanı işlemlerini kendiniz teker teker yaptırmanız demektir. ORM yani Entity Framework ise size bir çok kolaylıklar sağlamaktadır.

Entity Framework içerisinde 4 farklı yöntem barındırır bu yöntemlerin herhangi birini kullanarak projenizi geliştirebilirsiniz. Bu yöntemler;

  • Model First (Visual Studio Üzerinden Yeni Bir Veritabanı Oluşturma)
  • Database First (Var Olan Veritabanını Kullanma)
  • Code First (Visual Studio Üzerinden Yeni Bir Veritabanını Class Yapısını Kullanarak Oluşturma)
  • Code First (Var Olan Veri Tabanını Kullanma)

Entity Framework Model First Yöntemi 

Bu yöntem Visual Studio üzerinde boş bir model dosyası (.edmx) eklenerek veritabanını bu model üzerinde tasarlanabilmesine olanak sağlıyor. Derleme adımında verilen script dosyası veritabanını oluşturur.

Entity Framework Database First Yöntemi

Bu yöntemde var olan bir ilişkisel veritabanını projeye model olarak bağlanılıp gerekli classlarımızı Entity Framework tarafından oluşturulmaktadır.

Code First Yöntemi(Kod Yazarak)

Bu yöntem classlarımızı visual studio ortamında oluşturmaya başlayarak gerçekleştirdiğimiz bir yöntemdir. Veritabanımız bu classlardan türetilmektedir. Burada Mapping işlemleri yazılımcı tarafından classlar oluşturulurken Attribute’lar sayesinde yapılabilmektedir. Bu arada Mapping işlemi kısaca tablolarımızdaki kısıtlarımızı belirlediğimiz olaydır.

Code First (Var Olan Veritabanını Kullanma)

Bu yöntemde de classlar ve mapping kodları yazılımcı tarafından oluşturulmaktadır. Veritabanımız classlarımızın ve modellemenin durumuna göre güncellenmektedir.

3-   ENTITY FRAMEWORK AVANTAJLARI ve DEZAVANTAJLARI NELERDİR?

ENTITY FRAMEWORK AVANTAJLARI

  • OOP mantığına uygun kod geliştirmemizi sağlar çünkü veri tabanını nesne olarak tasarladığımız bir model mantığıyla ele alırız.
  • SQL bilgisine gerek kalmadan ve Veritabanı bağımsız bir şekilde kod yazabilir ve verilerimiz üzerinde işlem yapabiliriz.
  • CodeFirst yöntemiyle veritabanınızı taşımanıza gerek kalmadan istediğiniz yerde oluşturabilirsiniz.
  • Hızlı geliştirmeyi sağlar, gereksiz kod karmaşasına bulaşmadan kısa ve öz kod yazarsınız.

ENTITY FRAMEWORK DEZAVANTAJLARI

  • Entity Framework’ün en büyük problemi performanstır. Ado.Net’e oranla daha yavaş çalışır ama bu çok yavaş olduğu anlamına gelmez tabi.
  • Veritabanından veri alış-verişi yapılacağı zaman kontrol bizde değil Entity Frameworktedir. Yani arka planda veritabanı işlemleri için kendisi sorgular oluşturmaktadır. Basit bir veri işlemi için karmaşık bir sorgu gönderebilmektedir. Bu Sorguları SQL Server Profiler ile görüntüleyebilmektesiniz.
  • Entity Framework Syntax’ına alışması bir programcı için zaman kaynağının maliyetine sebep olabilir.
  • Schema’da herhangi bir değişiklik yapıldığı zaman EF çalışmayacaktır. Sizin bu Schema’yı solution’da güncellemeniz gerekmektedir.

Entity Framework’ü teorik olarak inceledik peki Entity Framework’ün prtaikte nasıl olduğunu Data First yöntemi ile bir proje üzerinden inceleyelim.

Projenin Kısa Açıklaması

Projemizde bir Sinema veri tabanımız olacak bu veri tabanını Entity Framework Data First yöntemi ile projemizin içine Model Nesnesi olarak aktaracağız. Daha sonra aktardığımız.  Veri tabanımızın içinde bulunan 3 adet tablo üzerinde CRUD işlemlerini yapmadan önce SOLID’e uygun olması açısından metodlarımızı doğrudan bir class içerisinde tanımlamayacağız ve Interfaceler oluşturacağız, oluşturduğumuz interfaceleri SinemaManager isimli oluşturacağımız bir classımıza kalıtacağız ve SinemaManager isimli classımıza kalıtılmış olduğu tüm Interfacelerin implementasyonunu yapmış olacağız böylelikle Interfacelerin sınırsız sınıfa kalıtım verebildiğinide sizlere göstermiş olacağız. Bu arada oluşturacağımız Interfacelerin isimleri IFilmBilgisiManager, IseansBilgisiManager, IucretManager olacak, bu simileri veri tabanımızdaki tablolardan esinlenerek verdim ki kafanız karışmasın. CRUD işlemlerini Linq kullanarak oluşturacağız ve hiçbir Sql kodu yazmadan veri tabanı işlemlerinmizi nesneler üzerinden gerçekleştirmiş olacağız. O zaman hadi başlayalım.

1.   Adım

Sinema isminde bir DB oluşturalım ve FilmBilgisi, Ucret ve SeansBilgisi isimli 3 tablo ekleyelim tabloların sütun değerlerini ve ilişkilerini aşağıdaki resimde gördüğünüz gibi düzenleyin.(İlişkileri düzenlemek zorunda değilsiniz)

EntityFramework DataFirst Örnekli Anlatım

2.   Adım

Visual Studio’yu açalım ve New Project diyerek yeni bir proje oluşturalım.

EntityFramework DataFirst Örnekli Anlatım

3.   Adım

Açılan pencerede Console Application’ı seçerek bir Konsol uygulaması oluşturalım.

EntityFramework DataFirst Örnekli Anlatım

4.   Adım

Şimdi ilişkisel veri tabanımızı visual studiodaki projemizin içine Model1 isimli bir nesne olarak oluşturalım. Bunun için Projemizde DataFirstCrudExample modülümüzün üzerine gelerek sağ tıklayalım ve Add -> New Item diyelim .

EntityFramework DataFirst Örnekli Anlatım

Daha sonra Data kısmından ADO.NET Entity Data Model’i seçelim.

EntityFramework DataFirst Örnekli Anlatım

Daha sonra açılan pencerede EF Designer from database’i seçelim ve next diyelim.

EntityFramework DataFirst Örnekli Anlatım

Sonraki adımımızda açılan pencerede  New Connection’a tıklayalım

add model as object

Açılan pencerede Server Name kısmına nokta(.) İşareti koyalım ve “select or enter a database name” kısmındaki ok’a basarak veri tabanlarımızı görelim.

add model as object

Sonraki adımda açılan veri tabanları arasından kendi oluşturduğumuz “Sinema” isimli veri tabanını seçelim. Ve Ok diyelim.

add model as object

Sonra açılan pencerede SinemaEntities ismindeisim otomatik gelecek direkt Next diyerek ilerleyelim.

add model as object

Açılan pencerede Entity Framework 6.x seçeneğini seçerek Next diyelim(İsterseniz 5.x kullanabilirsiniz bu proje için bir şey farketmiyor)

add model as object

Sonra Sinema veri tabanımızın içindeki klasörleri gösteren bir form açılacak buradan kullanacağımız veri tabanı modüllerini seçeceğiz bizim projemizde tabloların hepsini kullanacağız bu yüzden hepsini seçin.

add model as object

Sonunda Modelimiz oluştu aşağıdaki resimden Referanslara Entity Framework ve EntityFramework.SqlServer referanslarının otomatik attach edildiğini göreceksiniz ayrıca Model1.edmx altında tüm ilişkisel veritabanımın nesne olarak projemin içerisine aktarıldığını göreceksiniz.(Not : Interfaceleri henüz eklemedik lakin alttaki resimde IfilmBilgisiManager.cs gibi interfaceler gözüküyor buna aldırmayın ufak bir aksaklık 😊 )

add model

5.   Adım

Şimdi projemize Interfacelerimizi ekleyelim hatamızı telafi edelim. Projemizde DataFirstCrudExample modülümüzün üzerine gelerek sağ tıklayalım ve Add -> New Item diyerek 3 adet Interface ekleyelim. Bu interfacelere sırasıyla şu isimleri verelim;
IFilmBilgisiManager, ISeansBilgisiManager, IUcretManager olsun.

add interface
add interface

6.   Adım

Interfacelerimizin içlerine CRUD metodlarımızı oluşturalım.

IFilmBilgisiManager interface
ISeansBilgisiManager interface
IUcretManager interface

7.   Adım

Interfacelerimizi kalıtacağımız ve içlerindeki metodları implement edip kullanacağımız yani bizim iş katmanımız diyebileceğimiz SinemaManager.cs isimli classımızı oluşturalım ve gerekli kalıtımları verelim.

ana sınıf eklenmesi

Sınıfımızı oluştururuz.

interface implementasyon

Interfacelerimizden kalıtılmasını sağlarız, böylelikle Interfacelerin özelliği olan sınırsız kalıtım özelliğini de size göstermiş olduk, örneğin Interfaceler yerine bir Abstract sınıf hazırlamış olsaydık class’ımıza sadece bir tane abstract sınıf kalıtabilirdik ikinci kalıtım yapılamazdı.

Şimdi de interfacelerdeki metodlarımızı yukarıdaki resimde gördüğünüz kutucuğa basarak implemente edelim. Kutucuğa basınca karşımıza metodları seçebileceğimiz bir implementasyon kutucuğu açılacak Finish diyeceğiz.

interface implementasyon

Ve implementasyon işlemimiz tamamlandı. Aşağıdaki resimde gördüğünüz gibi Classın kalıtım aldığı tüm Interfacelerdeki metodlar classımıza implemente edildi. (Not : Dikkat ettiyseniz her bir Interfacenin kendisi içinde 2 adet sSelect metodu var bunlardan bir tanesi parametre alıyor diğeri almıyor burada ise bir Polimorfizm örneği görüyorsunuz. Ayrıca Interfacelerin hepsinin Select, Insert, Update ve Delete metodları kullandıklarını görüyorsunuz. Bunları karışmadan tek bir classın içinde  yani SinemaManager classının içinde kullanıcaz ve bu aynı isimli metodları Main metodumuz içinden SinemaManager’dan türettiğimiz nesnemiz üzerinden karışmadan  çağıracağız acaba bu nasıl olacak, kodun devamında bu durumu dikkate alarak incelemenizi tavsiye ederim.)

ISeansBilgisiManager interface içeriği

Şimdi Seans Bilgisi tablosu üzerinde CRUD işlemlerinin Linq ile nasıl yapılacağını metodlarla göstereceğim.

ISeansBilgisiManager interface içeriği
ISeansBilgisiManager interface içeriği
ISeansBilgisiManager interface içeriği

Resimlerden de anlayacağınız üzere Linq ile bu işlemler çok basit, kodları incelerseniz anlamakta güçlük çekmeyeceğinizi düşünüyorum. Kodun geri kalan kısmını anlatmayacağım zaten Seans Bilgisi üzerinden gösterdiğim için diğer Film Bilgisi ve Ucret tabloları içinde benzer işlemler yapılıyor olacak.

Hiçbir şekilde Sql kodu yazmadan kısa yollardan Linq ile veri tabanı işlemlerini nasıl gerçekleştirildğini projeyi incelerseniz görebilirsiniz. Bu yazımda anlatmak istediğim Entity Framework ile çok kolay bir şekilde verilerinizi yönetebilir ve kullanabilirsiniz.

Projenin tamamına erişebilmeniz için GitHub linkini aşağıda vereceğim, yazıyı okuduktan sonra kesinlikle projeyi açın ve inceleyin herşey yerine oturacaktır.

GitHub Link : https://github.com/yusufenesProject/EntityFrameworkDataFirst

Projenin bitmiş halinin çıktılarını aşağıya ekliyorum.

EntityFramework DataFirst eKRAN çIKTISI
EntityFramework DataFirst eKRAN çIKTISI
EntityFramework DataFirst eKRAN çIKTISI

Bir sonraki yazımızda görüşmek üzere hoşçakalın.

Write a Message