15
Nedir bu Entity Framework? Entity Framework Microsoft tarafından geliştirilen ve yazılım geliştiricilerin katı sql sorguları yazmalarını ortadan kaldırarak bir ORM (Object Relational Mapping) imkanı sağlayan framework'tür. ORM ise ilişkisel veritabanı yönetim sistemlerine direkt olarak müdahale yerine nesneler aracılığı ile müdahale edilmesini sağlayan bir köprüdür diyebiliriz. Piyasada bir çok ORM Framework'leri bulunmaktadır. Örnek olarak; DataObjects.Net, NHibernate, OpenAccess, SubSonic etc. Entity Framework vs.. Entity framework ile birlikte LINQ (Language Integrated Query) sorgularını kullanarak nesneler üzerinde güçlü bir sorgulama imkanına sahip oluruz. Entity framework'ün bize sunduğu hizmetler başlıca change tracking, identity resolution, ve query translation. Not : Tüm bu hizmetleri ilerleyen makalelerde detaylıca inceleyeceğiz ancak siz bu konuları araştırarak ön bilgiye sahip olursanız daha iyi anlayacaksınızdır konuları.. Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama tarafına odaklanmasını sağlamaktır. Çok basit bir örnek olarak, klasik ADO.NET uygulamalarında bir bağlantının açılmasından ve kapatılmasından tamamen biz geliştiriciler sorumludur. Ancak entity framework kullandığınızda bu tür işlemlere siz karışmazsınız. Sorgunuzu hazırlar ver entity framework aracılığı ile bunu database'e iletirsiniz.. Entity Framework Mimarisi

gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

Nedir bu Entity Framework?Entity Framework Microsoft tarafından geliştirilen ve yazılım geliştiricilerin katı sql sorguları yazmalarını ortadan kaldırarak bir ORM (Object Relational Mapping) imkanı sağlayan framework'tür. ORM ise ilişkisel veritabanı yönetim sistemlerine direkt olarak müdahale yerine nesneler aracılığı ile müdahale edilmesini sağlayan bir köprüdür diyebiliriz.

Piyasada bir çok ORM Framework'leri bulunmaktadır. Örnek olarak; DataObjects.Net, NHibernate, OpenAccess, SubSonic etc. Entity Framework vs..

Entity framework ile birlikte LINQ (Language Integrated Query) sorgularını kullanarak nesneler üzerinde güçlü bir sorgulama imkanına sahip oluruz. Entity framework'ün bize sunduğu hizmetler başlıca change tracking, identity resolution, ve query translation. 

Not : Tüm bu hizmetleri ilerleyen makalelerde detaylıca inceleyeceğiz ancak siz bu konuları araştırarak ön bilgiye sahip olursanız daha iyi anlayacaksınızdır konuları..

Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama tarafına odaklanmasını sağlamaktır. Çok basit bir örnek olarak, klasik ADO.NET uygulamalarında bir bağlantının açılmasından ve kapatılmasından tamamen biz geliştiriciler sorumludur. Ancak entity framework kullandığınızda bu tür işlemlere siz karışmazsınız. Sorgunuzu hazırlar ver entity framework aracılığı ile bunu database'e iletirsiniz..

Entity Framework Mimarisi

Page 2: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

EDM (Entity Data Model): EDM 3 bölümden oluşur. Conceptual Model, Mapping, Storage Model.

Conceptual Model: Bu alanda model sınıflarımız ve bu sınıfların ilişkileri yer alacaktır. Bu sınıflar veritabanı tasarımınızdan bağımsız olacaktır.

Storage Model: Bu alanda veritabanı tasarım modelimiz yer alır. Bu model içerisinde veritabanımıza ait tablolar, view'lar, stored procedure'ler ve bunlara ait ilişkiler ve key'ler yer alır.

Mapping: Bu alan ise model sınıflarımız ile tasarım modelimiz arasındaki haritalama işlemlerinin bilgilerinin tutulduğu alandır.

LINQ to Entities: Nesneleri sorgulamada kullanacağımız sorgulama dilidir. Bu sorgular bize model sınıflarını döndürecektir. Bu alanda LINQ'in yeteneklerini de kullanabiliriz.

Entity SQL: Yine LINQ to Entities gibi sorgulama yapabileceğimiz bir sorgulama dilidir. Ancak Linq To Entities'e göre daha zordur.

Object Services: Veritabanından sorgulama sonucunda alınan verilerin geri döndürülme aşamasında gereken convert (dönüştürme) işlemlerinin yapıldığı alandır.

Entity Client Data Provider: Bu alanın sorumluluğu hazırlanan LINQ to Entities yada Entity SQL sorgularını ADO.Net Data Provider'a gönderilmek üzere anlaşılır SQL sorgularına dönüştürmektir.

ADO.Net Data Provider: Bu katman ise standart ADO.NET kullanarak veritabanı ile iletişim kurar.

Bu makalemde temel olarak Entity Framework yapısını anlatmaya çalıştım. Çok detaya inmemin nedeni, bu sistemi kullanmaya başladığınız zaman neyin nasıl işlediğini bilin ki ona göre işlemlerinizi yapın demek içindi. İlk kez bakacaklar için karmaşık gelebilir ancak merak etmeyin. Entity Framework'ü kullanmaya başladığınız zaman çok rahat adapte olabileceğiniz bir yapı olduğunu göreceksiniz. Entity Framework kullanmaya başladığınızda kesinlikle ADO.NET e dönüş yapmak istemeyeceksiniz. Projelerinizin çok daha kısa sürede ve çok daha hatasız şekilde geliştirilebilmesi için büyük bir velinimettir Entity Framework.

Page 3: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

Entity Framework makale serisine Entity Data Model oluşturma konusu ile devam ediyoruz. Daha önce burada Entity Framework Nedir? sorusunu yanıtlamaya ve Entity Framework Mimarisini sizlere anlatmaya çalışmıştım. Öncelikle bu makaleyi okuyabilirsiniz.

Şimdi gelelim konumuza. Bu makalemde örnek bir veri tabanı üzerinden (SchoolDB) nasıl yeni bir data model oluştururuz buna bakacağız. Ayrıca oluşturduğumuz data modelimiz üzerindeki Entity-Table Mapping ve Context & Entity Classeskonularına değineceğiz.

Not: SchoolDB veritabanı makalenin sonunda vereceğim indirme linkinde bulunan örnek proje dosyasının içinde bulunmaktadır. Buradan kullanabilirsiniz..

Buradaki amacımız, SchoolDB veritabanı için bir Entity Data Model (EDM) oluşturmak ve temel işlemleri anlamak. Haydi başlayalım!Entity Data Model (EDM) ilgili veritabanınında bulunan tablo ve view nesnelerini kullanarak oluşturulan entity yapılarını ve yine ilgili veritabanına ait ilişkileri gösteren görsel bir modeldir. Biz şimdi Visual Studio 2013 ve Entity Framework 6kullanarak SchoolDB veritabanı için bir EDM oluşturacağız.

1 - Visual Studio 2013 üzerinde yeni bir Console Application projesi oluşturalım.

2 - Projemize sağ tıklayıp New Item'a tıklayalım. Ardından sol taraftan Data sekmesine gelelim ve karşımıza çıkan ADO.NET Entity Data Model seçeneğini seçelim. Name kısmına da SchoolModel yazalım. 

Page 4: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

3 - Modelimizi ekledikten sonra bize aşağıdaki gibi bir pencere açılacaktır. Burada bize 4 adet seçenek sunulmakta. Entity Framework ile çalışmak için birden fazla yaklaşım söz konusudur. Şu anda bize 3 adet farklı yaklaşım ile kullanım imkanı sunulmakta. Bunları kısaca anlatmak gerekirse; EF Designer from database seçeneği önce database yaklaşımı sunar, Emtpy EF Designer model seçeneği önce model yaklaşımı sunar, Emtpy Code First model ve Code First from Databaseseçenekleri ise önce kod yaklaşımını sunar. Bizim seçeneğimiz basit anlamda giriş projesi oluşturduğumuz için ve fazla karışıklığa mahal vermemek adına ilk seçenek yani EF Designer from database seçeneği olacaktır. Bu seçeneği seçip Next diyelim. 

Page 5: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

4 - Gelen pencerede var olan bir bağlantıyı seçebilir yada New Connection diyerek yeni bir bağlantı oluşturabiliriz. Bağlantımızı oluşturduktan sonra aşağıda bulunan Save Connection settings in App.Config as seçeneğini işaretleyelim. Bu seçeneği işaretlemezsek bağlantı bilgilerimiz direkt kod içinde belirtilecektir. Biz daha sonra da değişiklik yapılabileceğini düşündüğümüz için App.Config dosyasına eklenmesini istiyoruz. Bu seçenek işaretlendiğinde bir Name alanı gelmekte. Buraya girdiğimiz değere göre App.Config içerisine bir ConnectionString tanımlanacak ve yine bu isme göre Context sınıfımız oluşturulacak. O yüzden bu ismi kendinize göre düzenleyebilirsiniz.

Page 6: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

5 - Bu adımda ise hangi Entity Framework versiyonu ile çalışmak istediğimiz sorulacaktır. Biz burada en son versiyonu (şu anda 6.x) seçerek devam ediyoruz.

Not: Eğer .Net Framework sürümünüz 3.5 yada daha küçük bir sürüm ise 6.x versiyon gelmeyecektir. Buna dikkat etmelisiniz.

Page 7: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

6 - Bir sonraki adımda veritabanı objelerimiz (table, views, stored procedure, functions) ekranda listelenecektir. Burada istediklerimizi işaretleyelim.

Burada karşımıza çıkan 3 adet seçim kutusu bulunmakta. Bunların ne işe yaradığına bakalım..

1. Pluralize or singularize generated object names : Entity isimlendirme işlemini tekilleştirmek yada çoğullaştırmak için kullanılır. Çoğul bir tablo adının Entity adını tekil olarak belirler. Ayrıca bu tabloya ait one-to-many yada many-to-many ilişkilerinde model içerisinde bu nesneyi çoğullaştırarak gösterecektir. Örneğin Students isimli bir tabloyu size Student isimli bir Entity halinde oluşturur. Course tablosunda bulunan one to many ilişkisine göre Student isimli Entity içinde Courses isimli bir ilişkilendirme yapılacaktır. Bu seçenek şu an sadece İngilizce olarak kullanılabilmektedir.

Page 8: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

2. Include foreign key columns in the model : İlişki kurulan alanı entity içinde açıkca gösterip gösterilmeyeceğini belirlemek için kullanılır. Örneğin, Student tablosu ile Standart tablosu arasında one-to-many bir ilişki vardır. Yani her öğrenciye ait sadece bir tane Standart bulunabilir. Student nesnesi içerisinde bunu temsil etmek için StandartId özelliği ve Standart özelliği bulunmaktadır. Eğer bu seçeneği kaldırırsanız StandartId özelliği gösterilmeyecektir.

3. Import selected stored procedures and functions into entity model : Otomatik olarak veritabanında bulunan fonksiyon ve stored procedure'ler için Context sınıfı içerisinde metodların oluşturulmasını sağlar.

7 - Son olarak Finish butonuna tıklayarak modelimizi oluşturabiliriz.

Bu işlemlerden sonra oluşturulan EDM nesnemize çift tıklayarak dizayn alanına geçelim. Burada size tablo ve viewlar gösterilecektir. 

Yukarıda anlattığım şekilde oluşturduğumuz EDM nesnemizin temel yapıtaşlarını inceleyelim!Entity-Table Mapping

Page 9: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

Tüm entity nesnelerimiz EDM içerisinde veritabanımızda bulunan tablolar ile ilişkili durumdadır. Bu ilişki durumunu görüntülemek için istediğiniz tabloya sağ tıklayarak Table Mapping seçeneğine tıklayabilirsiniz. Açılan pencerede tabloya ait ilişkileri göreceksiniz. Burada manuel olarak değişiklik yaparsanız bu değişiklik otomatik olarak entity içine yansıtılacaktır.

Context & Entity Classes

Tüm Entity Data Model nesneleri bir adet Context sınıfı ve eklenen tüm tablolar için ise birer Entity sınıfı oluşturur. EDM nesnesini genişlettiğinizde gerekli iki adet dosyayı görebilirsiniz. Bunlar {EDM Adı}.Context.tt ve {EDM Adı}.tt

Page 10: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

School.Context.tt : Bu dosya bir T4 template dosyasıdır ve siz EDM (.edmx) dosyasında yaptığınız her değişiklikte Context sınıfını tekrardan üretir. School.Context.tt dosyasını genişlettiğinizde School.Context.cs dosyasını görebilirsiniz. Bu School veritabanına ait Context dosyasıdır. Varsayılan isimlendirme olarak {DB Adı} + Entities şeklinde tanımlanır. Yani SchoolDB veritabın için SchoolDBEntities şeklinde oluşturulur. Context sınıfları DbContext isimli sınıftan türetilmiştir. (EF 5.0 öncesi ObjectContext sınıfından türetilmekteydi)

Page 11: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

School.tt : Bu dosyalarda bir T4 template dosyasıdır ve her bir tablo için Entity sıfınları üretir. Entity sınıfları ise bir POCO (Plain Old CLR Object) sınıfıdır. Aşağıda Student sınıfına ait kodlar görünmekte.

public partial class Student {     public Student()     { this.Courses = new HashSet<Course>();     } public int StudentID { get; set; } public string StudentName { get; set; } public Nullable<int> StandardId { get; set; } public byte[] RowVersion { get; set; } public virtual Standard Standard { get; set; } public virtual StudentAddress StudentAddress { get; set; } public virtual ICollection<Course> Courses { get; set; } }

EDM Designer : EDM bizim veritabanımızın modellenmiş halidir. Burada ilgili tablolara alan eklemeler, güncellemeler ve silmeler yapabiliriz. Ancak burada yapacağımız tüm değişiklikler veritabanız ile eşleşmek zorundadır. Burada dikkat etmemiz gerekmekte. EDM aslında bir XML dosyasından oluşmaktadır. İsterseniz

Page 12: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

EDM (.edmx) dosyanıza sağ tıklayıp Open With diyerek XML Editör ile açıp inceleyibilirsiniz..

Page 13: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

Konumuz Model Browser!

 Oluşturmuş olduğumuz EDM görsel tarafında bize oluşturduğu tüm nesneleri göstermez. Bu görsel bize sadece entity nesnelerinin veritabanında hangi tablo yada view ile bağlantılı olduğunu gösterir.

Model Browser bize EDM tarafından oluşturulan tüm nesneler ve fonksiyonlar hakkında bilgi verir. Model Browser'ı açmak için EDM görsel arayüzüne gelip Sağ Tık > Model Browser yolunu izleyelim.

Model Browser aşağıdaki resimde de göründüğü gibi kavramsal model, depolama modelleri ve haritalama ile ilgili tüm bilgileri içerir.

Page 14: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

Yukarıdaki resimde görüldüğü üzere Model Browser aşağıdaki nesneleri içerir.

Diagrams: Model browser EDM'ye ait görsel diyagramları içerir. Bu diyagramlar sizin veritabanınız ile eşleştirilmiş entity nesnelerinizi içermektedir. EDM oluşturulduğunda varsayılan olarak bir adet diyagram oluşturur. Ancak geniş çaplı uygulamalarda tablo ve view sayınız fazla ise karışıklık olmaması adına farklı farklı diyagramlarda entity nesnelerinizi takip edebilirsiniz..

Entity Types: Veritabanınızdaki tablo ve viewlar için eşleştirilmiş olan sınıflarınızı içerir.

Complex Types: Veritabanınızda geriye değer döndüren stored procedure yada fonksiyonlar için dönülen değerlerin set edileceği sınıflardır. EDM içerisine eklediğiniz geriye değer döndüren stored procedure yada fonskiyonlar için otomatik olarak oluşturulur. Siz bir fonksiyonu EDM içine eklediğinizde context sınıf içerisine bu fonksiyon için bir metod hazırlanmaktadır. Bu metodun dönüş tipi ise bu Complex Types dediğimiz sınıflardan oluşur.

Page 15: gizemtanis.files.wordpress.com  · Web view2015. 6. 3. · Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama

Enum Types: Veritabanınızdaki bir tablonuzda numerik bir değer tutuyorsanız Entity Framework tarafında bu alanı enum olarak kullanabilirsiniz. Mesela Kullanıcılar isimli bir tablonuzda Cinsiyet isminde bir alan tutuyorsunuz. Değeride tinyint olsun. Bunu Entity Framework tarafında byte olarak kullanmak yerine direkt bir enum olarak kullanabilirsiniz. Bu sayede rakamlar ile uğraşmak zorunda kalmaz enumlar ile daha hızlı şekilde uygulamanızı hazırlayabilirsiniz.

Associations: Bu alanda ise tablolarınız arasındaki ilişkilerin (foreign key) listesini görebilirsiniz.

Function Imports: Complex Types alanında belirttiğim gibi veritabanınızdaki stored procedure ve fonksiyonlar için context sınıfınız içerisinde metodlar yazılmaktadır. Bu metodlar Function Imports altında listelenir.

.Store: Veritabanınızın şemasını (SSDL) temsil eder.