1 Ekim 2015 Perşembe

Entity Framework İle Code First Yaklaşımı

Linq To SQL gibi Entity Framework mimariside biz yazılımcılara oldukça hız kazandırmakta ve veritabanı işlemlerinde atılan bir çağın basamaklarını teşkil etmektedir. Haliyle biz yazılımcılar ister istemez bu mimarilere yönelmekte ve meraklarımızın yanında çalışmalarımızı da bu mimarilerle sürdükmekteyiz. Tabi günümüzde bir yapı yahut mimariye yönelirken kendimize uygun prensip ve yaklaşım seçmemiz yaşayacağımız karışıklığı ortadan kaldıracaktır. Burada demek istediğim o ki, günümüzde her mekanizmasının birden fazla yaklaşımı ve prensibi mevcut olduğundan, öğrenme sürecinde kaçınılmaz olarak kaynakların farklılıkları kafanızı karıştıracaktır. İşte bunun sebebi, her kaynağın farklı bir yaklaşımı merkez edinmesindendir.

Entity Framework mimarisinde temelde üç adet yaklaşım mevcuttur.

Code First
Database First
Model First
Bu yazımızda Code First yaklaşımı üzerine duracağız. Zamanla diğer yaklaşımlar üzerinde de istişaremizi ederiz diye umuyorum.

Code First Nedir?
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. Eee bir yazılımcının en büyük arzusu; tez işte tam hakimiyet… İşte Code First böyle bir çizgiye sahiptir.

Projeye Entegrasyonu ve Code First Yapısının İnşası
Öncelikle yapmamız gereken, üzerinde çalıştığımız projeye Entity Framework Nuget paketini eklemektir.

“Tools” -> “Nuget Package Manager” -> “Manage Nuget Packages for Solution…” kombinasyonunu takip edin.








Açılan pencerede aşağıdaki gibi “entity” anahtar kelimesini aratın. Listede karşınıza çıkan “EntityFramework” paketini Install ediniz.








Yüklemeyi gerçekleştirdikten sonra gerekli Entity Framework referansları projeye entegre edilmiş bulunmaktadır.
Şimdi sıra geldi Code First yapısıyla bir model oluşturmaya. Haliyle oluşturma aşamasında inşa sürecinide görmüş olacağız.
Hatırlarsanız eğer Code First yapısı veritabanı işlemlerini programatik olarak gerçekleştirmemize yarayan bir yaklaşım sergilemekteydi. O halde örnek olarak çalışacağımız projede hem veritabanı oluşturacağız, hem de Code First yapısının diğer nimetlerinden faydalanacağız.

Code First ile tüm modele hakimiyet sağlamanın ekstra getirisi kodlara disiplinli bir hiyerarşik düzen sağlamanın sorumluluğu getirmesidir. Haliyle modele tam hakimeyet demek, a’dan z’ye biz kodlayacağız demek. O yüzden entitylerimi(yani tabloları) “Entity” klasörüne, yazılım ile server arasında iletişimi sağlayacak olan Context sınıfını da “Context” klasörüne oluşturacağım.
Şimdi Code First ile bir veritabanı oluşturmayı ve bu veritabanı içerisine bir tablo eklemeyi görelim.


class OrnekTablo
{
    public int ID { get; set; }
    public string Kolon1 { get; set; }
    public string Kolon2 { get; set; }
}

Öncelikle tablomuzu temsil eden sınıfımı oluşturdum. Şimdi veritabanı ile bağlantı kuracağımız Context sınıfını oluşturuyorum.


class OrnekVeriDbContext : DbContext
{
    public DbSet<OrnekTablo> OrnekTablos { get; set; }
}

Context sınıfımızı incelerseniz eğer DbContext sınıfından türemektedir. Bunun sebebi, Entity Framework mimarisinin nimetlerine bu sınıfın mirasından erişebilecek, ayriyetten ilgili sınıfımızın bir Context sınıfı olmasını sağlayacaktır. “OrnekVeriDbContext” sınıfına verdiğimiz isim bizim için oldukça önemlidir.
Code First yapısında en temel nokta, veritabanındaki tablolaları temsil edecek Generic yapıdaki DbSet tipinden propertyler olarak tutmasıdır. Yukarıda gördüğünüz “OrnekTablos” isimli property, bizim “OrnekTablo” isimli tablomuzun, veritabanındaki fiziksel yansımasını oluşturacaktır.
İşte en temelde de olsa Code First yapısında bir veritabanı dizayn ettik ve sıra bu veritabanını oluşturmaya geldi. Peki… Oluşturduğumuz bu yapı, hangi Server’da hangi isimde veritabanı oluşturacağını biliyor mu? hayır…
İşte bu bildiriyi de eğer web kısmında çalışıyorsanız “web.config” dosyasında, yok eğer masaüstünde takılıyorsanız “app.config” dosyasında belirtebilirsiniz.



<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="OrnekVeriDbContext" connectionString="Server=.;Database=OrnekVeritabani;Trusted_Connection=true;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>



Yukarıdaki app.config dosyasına “connectionStrings” node’ı eklenerek gerekli ayarlama yapılmıştır. Tabi, sizlerin net görebilmesi benimde net izah edebilmem için ilgili parçayı aşağı almamız uygun olacaktır.


.
.
.
  <connectionStrings>
    <add name="OrnekVeriDbContext" connectionString="Server=.;Database=OrnekVeritabani;Trusted_Connection=true;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
.
.
.


Gördüğünüz gibi bir connectionStrings node’ı açıyor ve içerisine ekleme yapıyoruz. “name” özelliğine Context sınıfımızla birebir aynı ismi veriyoruz. Bunda zorunlu değiliz lakin başka Context’lere nazaran karışıklığı önlediği için tavsiye ediyorum. “connectionString” Attribute’una bildiğiniz Provider’ımızı yazıyoruz. Ama burada dikkat!!! Yazdığınız bu Provider’da ki veritabanı olmayan bir veritabanı olması gerekiyor. Olması gerekiyor ki, Code First yapısı kendisi oluşturabilsin. Bunların yanında “providerName” Attribute’u sayesinde ilgili bağlantının System.Data.SqlClient kütüphanesinde çalışacağını, yani SQL Server olduğunu belirtmiş oluyoruz.
Bu işlemlerden sonra Program.cs sınıfında “OrnekVeriDbContext” sınıfından bir nesne üretip ilk oluşumu seyredebiliriz.


class Program
{
    static void Main(string[] args)
    {
        OrnekVeriDbContext Veri = new OrnekVeriDbContext();
        Veri.Database.Create();
    }
}

Yukarıdaki kod bloğunu çalıştırdığımız zaman neler olmuş bakalım



Hiç yorum yok:

Yorum Gönder

SQL Çalışma Sorularının Çözümü

 -Ürünler tablosundaki ürünlerden Rengi siyah,silver ya da multi renkte olanları fiyat bilgisine göre büyükten küçüğe getirilip gösterilecek...