Merhaba Arkadaşlar;
Bu yazımda, son zamanlarda çok sık duymaya başladığımız bir kavram olan, ORM "Object Relation Mapping" konusuna değinip, Microsoft'un 2008 yılında çıkardığı ve .Net Framework 3.5 SP1 ile bize katılan ADO.NET ENtity Framework'den bahsedeceğim.
ORM nedir; Veritabanımızda yaratmış olduğumuz her bir nesneye karşılık kod tarafında bir nesne oluşturan programlardır diyebiliriz.Bu programlar code generation tekniği kullanarak bizim yazmamız gereken kodu otomatik üretiyor. OOP mantığına uygun bir şekilde bizim veritabanımızda bulunan tabloları birer nesne örneklerini oluşturuyor, denilebilir. Veritabanımızda bir tablo var tbKisiKayit(id, adi, soyadi, adres, kayitTarihi) Normal şartlarda OOP yazılım geliştirirken bu tabloya karşılık gelen bir sınıfı kendimiz elle oluştururuz. Yani KisiKayit isminde bir class ve id , adi , soyadi , adres, kayitTarihi alan "field" ve özellik "property" lerini oluştururuz. Daha sonra da, genel olarak kullanılan, Update, Insert, Delete ve Select sorgularını hazırlarız. ORM bütün bu standart işlemleri bizler için arka planda otomatik olarak yapıyor ;) Kısaca veri erşimini basitleştirip, OOP mantığına tam uyumu sağlıyor.
Veritabanı içerisinde bulunan tablo ve buna bağı olan satırları birer Object, kolonları ise Property olarak kullanıma hazırlamaktadır. LINQ'de olduğu gibi çeşitli provider'lar yardımı ile veritabanlarını kullanabilmektedir. ADO.NET Entity Framework üzerinde gerçekleştirilen CRUD "Create, Read, Update, Delete" sorguları arka planda otomatik olarak generate edilir ve yine otomatik olarak SQL sorgularına Convert edilir. Linq To Sql'de aynı işi yapıyor diyebilirsiniz, ancak Linq To Sql class'ı tek bir geliştiriciyi desteklemeke, ENtity Framework size böyle bir sınırlamam getirmemektedir.
ADO.NET Entity Framework gerçek anlamda, çok ciddi bir içeriğe sahiptir ve binlerce sayfa bir kitap bile sadece bu konu ile yazılabilir, yazılmaktadır da. Ben Entity Framwork'ün temel yapısına ve genel olarak kullanım şekillerine değineceğim.
Linq To Sql Class ile ADO.NET Entity Framework, Microsoft'ta iki farklı ürün grubu tarafından geliştirilmektedir. Bu iki farklı teknoloji, iki farklı ürün grubu tarafından geliştirilmesi sürerken, Data Access Team, yeni bir erişim yöntemi üzerinde, sadece Entity Sql adında farklı bir sorgulama dili üzserinden veri erişimini sağlamaktaydı. Language Integrated Query ile adaptasyon sağlandıktan sonra, önceliği tamamen Entity Framework'e ve bu ekibe verildi ve gelişimi devam etti.
Entity Data Model (EDM): Entity Data Model, uygulamamıza erişecek olan veri kaynağı için, bir harita "Map" oluşturmaktadır. Arkaplan da otomatilk olarak oluşturulan kodların tamamı, bu Map sayesinde ve buna uygun bir yapıda olmaktadır. Bizler de rahat bir şekilde, Create, Read, Update ve Delete işlemlerimizi yapabiliyoruz. EDMX uzantılı olan bu dosya, aslında XML tabanlı olmaktadır. Runtime'da edmx dosyası "Conceptual Schema Defination Language (cdsl), Mapping Specification Language (msl), Store Schema Defination Language (ssdl)" diye üç blümde ayrılan, farklı dosyalara bölünmektedir. Bu dosyaların hepsi uygulama içerisinde gömülü ve otomatik olarak geliştirilen dosyalardır ve bunlar için yapılması gereken bir şey de yoktur ;)
İlk çıktığında Entity framework sadece Generate From Database seçeneği ile gelirken, daha sonradan, Visual Studio 2010 ve .Net Fremework ile birlikte, Empty Model şablonuda getirilmiştir. Var olan bir database'i Entity Framework'e bağlayabilirken, diğer taraftan kendinizin oluşturduğu Entity Model Container'den de, veritabanınızı Generate edebilirsiniz.
Bu yazıda genel bir bakıl olarak düşünmelisiniz. Bunu takip eden yazımızda ise, Empty Model şablonundan bir veritabanı ve tablolarını, alanlarını, ilişkilerini oluşturup, CRUD işlemlerini inceleyeceğiz.
Aşağıda Database'den bir Entiry Data Model nasıl yaratılacağı ile ilgili işlem adımlarını bulabilirsiniz.
Add New Item -> ADO.NET Entity Data Model şablonunuzu, projenize dahil edebilirsiniz.

Daha sonra iki farklı şablon karşınıza çıkacak. Biz burada Generate From Databe'i seçeceğiz, çünkü varolan veritabanımıza uygun bir modelleme yapmak istiyoruz ;)

Eğer projenizde daha önceden tanımlanan bir ConnectionString varsa size bunu kullanmanızı önerecek, yoksa NewConnection buttonundan yeni bir ConnectionString oluşturmanıza yardım edecektir.

Sql Server'ın Instanbce Name'ini seçtikten ve bağlanacağınız vertabanınızı belirttikten sonra, bağlantı için gerekli olan ConnectionString sizin için oluşturulacaktır.

Standar olarak kullandığımız ConnectionString yapısından farklı bir örnek karşınıza çıkacaktır. Yukarıda bahsettiğim ve 3 parçadan oluşan her bir dosya için gerekli olan bağlantı bilgileri burada bulunmaktadır ;)

Son olarak Entity Modelinizde kullanamak istediğiniz, Tablo, View, Stored Procedures ve Functionların listelendiği sayfa karşınıza gelecektir. Stored Procedure ve Function'lar için sadece ekleme işlemi yeterli olmayacaktır ve bunu bir method oarak Entity Framework'den kullanmanız için bir iki ufak ayar yapmalısınız. Pluralize ve Singularize işlemi tekilleştirme ve Çokğulaştırma olarak yapılan bir işlem. Bu bilgileri daha sonra örnek bir proje ile göstereceğim ;)
