19 Mayıs 2012 Cumartesi

Entity Framework - ORM Giriş

Merhaba arkadaşlar.
Artık günümüzde vertabanı kullanmayan uygulama yok dercesine, varsa da kendi yağında kavrulmaya mahkumdur. Bu uygulama bir web, windows yada mobile application olabilir. Yani projemizde bir database modeli, bir de uygulama modelimiz var. Database modelinde tablolar, kolonlar.. Uygulama modelinde ise sınıflar, property ler var.. Database nesnelerin, database modelinden soyutlanarak uygulamada kullanılabilmesi çok zaman alan ve çok zahmetli bir iştir. Aynı şekilde uygulama modelinde kullanılan nesnelerin database modelinde kullanılabilmesi de. İşte arkadaşlar bu nedenle ORM (Object Relation Mapping) araçlarına ihtiyaç duyulmuştur. ORM nin Türkçe karşılığı nesne ilişkili haritalamadır. ORM ile bu iki yapı arasında iki taraflı uyarlama işlemi yapılır. Birbirine dönüşümleri yapılır. Database deki her bir nesne için uygulamada karşılığını, uygulamadaki her bir nesne için de database de karşılığını generate eder. Entity Framework, DotNet 4.0 ile gelen Microsoft 'un ORM aracıdır. Nasıl java için Hibernate varsa(C sharp a uyarlanmış hali NHibernate dir), Microsoft için de Entity Framework vardır. Aslında yaptığı iş tam olarak database modelini uygulamadan soyutlayarak nesneler üzerinden işlem yapmamızı sağlar. Tablo üzerinde select, insert, update, delete metotları otomatik olarak generate ettirilir. Böylece yazılımcıya hız kazandırmış ve hata yapma riskini en aza indirmiştir. Performans bakımından, ADO.NET 'e göre daha yavaş çalışır.

Microsoft, Linq to Sql ile ilk aşamada Sql Server 'ın modellemesini ve ilgili metotları generete ettirmesini sağladı. Ama tam olarak bir ORM aracı değildi, mapping 'de sorunlar vardı. Daha sonra Microsoft Linq to Sql 'e destek vermeyeceğini ve Entity Framework ile orm ye tam bir giriş gerçekleştireceğini açıkladı.  

EntityFramework 4.0 ile gelen ORM araçlarıyla : db yada uygulama model den birini oluştururuz, diğeri ondan oluşur. Varolan bir database i uygulamaya uyarlama işine Database First yaklaşımı, uygulamada var olan nesneleri de database e uyarlama işlemine de Model First yaklaşımı denir. DotNet Framework 4.0 ile şuan sadece SqlClient provider ı sayesinde SqlServer veri tabanları için kullanılmaktadır. Fakat 4.1 ile farklı provider lar sayesinde farklı veritabanlarına da çift taraflı mapping yapmak mümkündür.

Orm in ne olduğunu anladıktan sonra bir de şekle dökmek gerekirse ;


Yukarıdaki şekle bakıldığında database ile uygulama bir orm aracıyla bağlı olduğunu görebiliriz. Bu araç çift taraflı uyarlama işlemi yapıyor demiştik. Veritabanından uygulamamıza bir uyarlama yaptığımızda aradaki bu orm aracı sayesinde bir "code generate" işlemi gerçekleşir. Nasıl bir kod üretiliyor. Database First makalemde daha ayrıntılı işleyeceğim. Bir de Model First yaklaşımı vardı: uygulamadan veritabanına bir uyarlama işlemi yapabiliyordum, bu durumda da veritabanında nasıl tablo oluşturulur bilmeme gerek yoktur. Veya uyarlama yaptıktan sonra uygulamadan veritabanındaki verilerimi manipüle ederken t-sql dili bilmeme gerek yoktur. ORM nin bana sağladığı sınıf metotlarıyla bu işlemleri gerçekleştirebiliyorum. İşte aradaki ORM aracıda bu işlemleri t-sql diline dönüştürüyor.

Orm in ne olduğunu ve nasıl çalıştığını anladıktan sonra maddeler halinde avantajlarına ve dezavantajlarına bakalım arkadaşlar.

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 mssql 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.
Entity Framework Database First makalemde görüşmek dileğiyle, hoşçakalın...

1 yorum:

  1. Yani aslında dezavantajları daha fazla gibi görünüyor. Ama kararda veremiyorum hangi yöntemi seçeceğim konusunda.

    YanıtlaSil