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 Classes konuları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 6 kullanarak 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. 

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 Database seç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. 

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.

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.

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.
  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

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

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)

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 { getset; }     public string StudentName { getset; }     public Nullable<int> StandardId { getset; }     public byte[] RowVersion { getset; }     public virtual Standard Standard { getset; }     public virtual StudentAddress StudentAddress { getset; }     public virtual ICollection<Course> Courses { getset; } } 

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 EDM (.edmx) dosyanıza sağ tıklayıp Open With diyerek XML Editör ile açıp inceleyibilirsiniz..

Örnek projeyi buradan indirebilirsiniz.

Başka bir makalede görüşmek üzere. Kalın sağlıcakla..