31 Ocak 2019 Perşembe

Entity Framework(EF) Nedir?

Başlıklar
·         EntityFramework Nedir
·         ORM Nedir
·         EF Modelleri
o   Code First
o   Model First
o   Database First
·         Neden Entity Framework kullanmalıyız?


Entity Framework Nedir?

ADO.Net ile veri tabanı kodu yazmak ve yönetmek, sıkıcı ve monoton bir iştir, yazılımla uğraşan herkesin en büyük sıkıntısı da bu olsa gerek; işte bu noktada Microsoft bizim için veri tabanıyla ilgili faaliyetleri otomatikleştirmek için “Entity Framework” adı verilen bir O/RM framework’ünü geliştirdi. Entity Framework , Microsoft tarafından desteklenen .NET uygulamaları için bir açık kaynak ORM framework’üdür. Geliştiricilerin, veri tabanı tablolarına odaklanmadan belirli alanlara özgü sınıf nesnelerini kullanarak verilerle çalışmasını sağlar. Entity Framework ile geliştiriciler, veriyle uğraştıklarında soyutlamayı daha üst seviyede yapabilir ve geleneksel uygulamalarla karşılaştırıldığında daha az kodla veri odaklı uygulamalar oluşturabilir ve koruyabilir.


ORM Nedir?

Yukarıdaki şekle bakıldığında uygulama ORM e bağlı olduğunu görebiliriz. Database le direk olarak herhangi bir bağlantısı söz konusu değildir. Peki, burada bizim yapmak istediğimiz Database işlemlerimiz nasıl oluyor da SQL ifadesi yazmadan gerçekleşiyor? Uygulama tarafında oluşan nesneler üzerinden biz Database işlemi yaptığımızda ORM tarafından bu işlem SQL ifadesine dönüştürülüyor. Bu işleme Code Generating işlemi denir. Tüm ORM araçları aynı işlemi yaparlar. Mesela siz uygulamanızda bir nesne üzerinden bir tabloya kayıt ekleme işlemi yapmak istediğinizde ORM otomatik olarak insert SQL ifadesini oluşturup Database e gönderir. Bu sayede sizin SQL bilmenize gerek kalmamaktadır.

ORM’lerin başka bir kazancı ise veri tabanından bağımsız çalışabilmeleridir; her ne kadar SQL dili standart olsa da veri tabanı sistemleri ve versiyonları arasında farklılık göstermektedir (bir veri tabanında FIRST kullanılırken başka bir veri tabanında TOP sözcüğü kullanılabilir), bu yüzdende en temel seviyede sql yazmadığınız sürece farklı veri tabanı platformları arasında uyum sağlamak zor ve zahmetli bir iştir. Bu bağlamda ORM Araçları veri tabanı nesnelerini uygulama tarafında nesneleştirdiği için bir standart sağlarlar.

Avantajları :

  • OOP olarak kod geliştirmeye imkan sağlamaktadır.
  • SQL bilmeden bir veri tabanına bağlanabilir ve SQL ile ilgili birçok işlemi rahatlıkla yapabilmek.
  • Herhangi bir Database bağımlılığı yoktur.
  • Oldukça esnek bir yapı sağlamaktadır. Yani Oracle kullanıyorken bir anda MS SQL i kullanabiliriz.


Dezavantajları :

  • Performans. Bir ADO.Net kadar hızlı çalışmamaktadır.
  • Database den bilgi alış-verişi sırasında kontrol %100 bizde değildir. Bazen oluşturulan SQL ifadelerinde sorun çıkabilir veya biz daha güzel ve hızlı çalışacak SQL ifadeleri yazabileceğimiz durumlar olabilir. Fakat tüm SQL ifadelerini Code Generating ile kendi oluşturduğu için bu bir dezavantajdır.
  • Veri tabanı bağımsızdır. Fakat uygulama tarafındaki nesneler ile veri tabanındaki nesneler birbirine MAP edildiği için nesne bağımlılığı vardır.
  • Farklı platformlarda farklı farklı ORM araçları mevcuttur arkadaşlar. Mesela Java’da Hibernate, Microsoft’ta, EntityFramework… Aynı zamanda Hibernate altyapısını kullanan ve .Net platformu için nHibernate ORM aracı vardır. Daha birçok araç mevcuttur. Fakat temelinde hepsi ORM mantığı ile çalışırlar.


Entity Framework ile 3 farklı yöntem ile proje geliştirilebilir.

Code First

Model First

Database First


Code First

Veritabanı ile Programlama dili arasında bağ kuran bir tekniktir. Projenizde veritabanı işlemlerinizi mümkün mertebe Visual Studio tarafında kod yazarak gerçekleştirmenizi sağlayan bir yaklaşımdır. Bu yaklaşım sayesinde veritabanı arayüzü ile yazılımcı arasında ilişki minimize edilmektedir.
Code First yapısında programlama dilindeki “class” yapıları veritabanındaki “tablo” yapılarına, “property” yapıları ise veritabanındaki “kolon” yapılarına denk gelmektedir.
Ayrıca Attribute’lar sayesinde veritabanı yapılarına Validationlar uygulanabilmekte ve kolonlara belirli şartlar veyahut kısıtlamalar koyulabilmektedir.
En önemlisi ise projenizdeki modelin oto kontrolünü elinizde hissetmenize ve tam hakimiyetle istediğiniz gibi kullanmanıza olanak tanıyor. Database First yaklaşımı Linq To SQL yapısındaki gibi sürükle bırak mantığıyla çalışmakta ve herşeyi otomatik halletmektedir.


Model First

Bu yaklaşım, sıfırdan bir veritabanı oluşturarak projeye başlanması gereken durumlar için ideal olabilmektedir. Kod yazmadan ya da serverda fiziksel database ile ilgilenmeden, tamamen entity model üzerinden veritabanı oluşturmak için kullanılan yaklaşımdır. Entity user interfacesi üzerinden modellediğiniz verilerinizi generate ettiğinizde hem database tarafında hem de kod tarafında otomatik olarak oluşurlar.


Database First

Database First , yeni bir entity model oluşturmak için, adından da anlaşılacağı üzere önceliği veritabanı olarak görür. Yani modeli, hazırda bulunan bir veritabanından oluşturur. Eğer uzun zamandır kullanılan bir veri tabanı üzerinde çalışacak ve bu veritabanı için bir model oluşturacaksanız bu yaklaşımı tercih etmelisiniz. Bu yaklaşımda çalışma yöntemi olarak daha çok server tarafında işlemler yapılır ve değişiklikler modele aktarılır.


Neden Entity Framework kullanmalıyız?


  • ·         Linq to sql ile veya entity framework ile kolaylıkla select * from tablo_adi gibi bir sorgunun sonucunu kolonları ile class olarak alabilirsiniz.
  • ·         Asp.net'de Strongly Type .net 4.5 ile gelen Eval(“KolonAdi”) yerine intellisense desteği ile Item.KolonAdi Yazmamızı sağlayan güzellik.  Tabi burada Repeater'ın ItemType="" özelliğine bağlanan verinin tipini yazmanız gerekiyor. Örneğin bir öğrenci tablonuz varsa ItemType="Students" şeklinde yazdığınızda <%#item.name%> şeklinde veriyi basabilirsiniz.
  • ·         Oluşturma, Okuma, Güncelleme, Ekleme, Silme  Cruid (Create, Read, Update, Insert, Delete)işlemlerini daha az kod ve daha hızlı bir şekilde yaparsınız.
  • ·         Web Servis geliştiriyorsanız DataSet/DataTable Dönüş yapamazsınız. Donus değeriniz fazla büyük olur. POCO oluşturup datasetdeki verileri ona doldurup göndermeniz gerekir. EF ile direk tabloyu dönebilirsiniz.
  • ·         Entity framework ve linq to sql de kodlar t-sql dönüştüğünde Sql Injection'ı önlemek için parametre kullanır ve bunun önüne geçer
  • ·         Performans. Tabi bu durum göreceli bir durum ancak. Entity framework sahip olduğu cache özelliği sayesinde sorgu ve sonuçları bellekte ya da Redis gibi dağıtım sistemlerde cachelemenize olanak sağlar. (Entity Framework Second Level Cache)
  • ·         Asp.net mvc de cruid işlemleri için entity framework ile bir çözüm mevcut. Control eklerken “MVC5 controller with views, using entity framework” seçeneğini seçtiğinizde sizin için  Insert Update Delete ve List işlemlerini hazırlar. Kısa sürede tablolarınız için gerekli kodları yazar ufak düzenlemeler ile her projede olan Cruid işlemlerini kolaylaştırmış olursunuz.
  • ·         Generic Listler in faydaları. Linq veya entity framework kullandığında kodlar tekrar sorgulanabilirdir. Örneğin gelen datadan Lambda İfadeleri ile bunları Filtreleyebilir (Where), Sıralayabilir(OrderBy), istediğiniz kadarını alabilir(Take), İstediğiniz kadarını atlayabilir(Skip)  bu ve bunun gibi işlemleri hızlıca yapabilirsiniz. Ado.Net ile bu işlemleri yapabilirsiniz ama önce klasik Ado.Net işlemleri yapıp sonra bunları oluşturacağınız bir Class'ın Listesi içine doldurmanız gerekir







Hiç yorum yok:

Yorum Gönder