İçeriğe geç

Entity Framework İle Code First Yaklaşımı

Merhabalar bu yazıda Code First yaklaşımı üzerinde durup basit bir proje yapacağız. İyi okumalar...

İlk olarak Code First Nedir, bununla başlayalım. Projenizde oluşturduğunuz modeller aracılığı ile Entity Framework araya girerek bu modelleri tablolara dönüştürebilmektedir. Ayrıca sql dilinde vermiş olduğunuz bütün özellikleri bu modeller aracılığı ilede verebilirsiniz. Mesela bu alan zorunludur, max karakter sayısı 255'tir v.b. Bunlarla alakalı paylaşımları daha sonra yapacağım. Bu yazıda tek sayfada bir Code First Projesi örneği vereceğim. İlk olarak tablomuza karşılık gelecek bir model oluşturalım.

    public class Tablo
    {
        public int Id { get; set; }
        public string Isim { get; set; }
        public string Soyisim { get; set; }
        public bool IsDelete { get; set; }
    }

Yukarıdaki kod açık bi rşekilde tablomuzda 4 alan olduğunu bunların ID, Isim, Soyisim ve IsDelete olduğunu söylemektedir. İlk property'nin içerisinde Id kelimesi geçiyorsa Entity Framework bunu otomatik olarak, tablolarımızda ID kısmıyla özleştirip NOT NULL PRIMARY KEY gibi özellikleri kendisi tanımlayacaktır.

Daha sonrasında projemize Entity Framwork'ü dahil etmemiz gerekecektir. Direkt olarak bunu Manage NuGet Packages üzerinden projenize EntityFramework'ü dahil etmeniz gerekecektir. Yükleme işlemlerinden sonra gerekli DLL'ler Reference kısmına eklenecek ve artık projemizde Entity Framework'ü kullanmaya hazır olacağız.

Daha sonrasında VeriTabani isimli bir class daha oluşturdum ve bu class için DbContext'ten miras aldım. İçerisinde tablolarımı (modellerimi) tanımlayacağım.

    public class VeriTabani : DbContext
    {
        public VeriTabani() : base("name = VeriTabaniContext") { }
        public virtual DbSet<Tablo> Tablo { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

    }

public VeriTabani() : base("name = VeriTabaniContext") { } kısmında bulunan name kısmı ConnectionString'imizde kullanacağımız alan olacaktır. Ayrıca burada bulunan public virtual DbSet<Tablo> Tablo { get; set; } kısmı ise tablomuza karşılık gelmektedir. Kısacası şu şekilde düşünebilirsiniz DbSet'ler tablolar, DbContext ise Veri Tabanlarına denktir.

Şimdi static bir class tanımlayarak temel veritabanı işlemleri yapacağımız kısımları görelim.

 public static class VeritabaniIslemleri
    {
        public static void VeriEkle(string isim)
        {
            var d = new VeriTabani();
            d.Tablo.Add(new Tablo
            {
                Isim = isim,
                IsDelete = false
            });

            d.SaveChanges();
        }

        public static void VeriGuncelle(int id)
        {
            var d = new VeriTabani();
            var veri = d.Tablo.FirstOrDefault(x => x.Id == id);
            veri.Soyisim = "GÖRÜN";
            d.SaveChanges();

        }

        public static void VeriGetir()
        {
            var d = new VeriTabani();
            var sonuc = d.Tablo;
            foreach (var item in sonuc)
            {
                Console.WriteLine(item.Isim);
            }
        }
    }

Buradaki işlemler son derece temel ve konunun başlangıç seviyesindeki kişiler için anlaşaılabilmesi için herhangi bir katman kullanılmadan direkt olarak yazılmıştır.

Son olarak App.config dosyasının içerisine connectionStrings kısmında dahil etmemiz gerekmektedir. Dahil edeceğimiz alan

<connectionStrings>
   <add name = "VeriTabaniContext"
      connectionString = "Data Source=KUDAYPC;Initial Catalog=VeriTabani;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
      providerName = "System.Data.SqlClient"/>
</connectionStrings>

Evet bağlantımızda artık hazır. Son olarak Main metodu altında veri tabanı işlemlerini yapalım ve projenin kodlarını komple bir göerlim.

    class Program
    {
        static void Main(string[] args)
        {
            VeritabaniIslemleri.VeriEkle("Beren Kuday");
            VeritabaniIslemleri.VeriEkle("Fatih Terim");
            VeritabaniIslemleri.VeriEkle("Milan Baroş");
            VeritabaniIslemleri.VeriEkle("Arda Turan");
            VeritabaniIslemleri.VeriEkle("Lincoln");
            VeritabaniIslemleri.VeriEkle("Melo");

            VeritabaniIslemleri.VeriGuncelle(1);

            VeritabaniIslemleri.VeriGetir();
        }
    }

Şimdi bu işlemleri tamamladıktan sonra Program.cs dosyamızla App.config dosyalarımıza tekrardan bir bakalım.
Program.cs Dosyası:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeFirstg
{
    public class Tablo
    {
        public int Id { get; set; }
        public string Isim { get; set; }
        public string Soyisim { get; set; }
        public bool IsDelete { get; set; }
    }

    public class VeriTabani : DbContext
    {
        public VeriTabani() : base("name = VeriTabaniContext") { }
        public virtual DbSet<Tablo> Tablo { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

    }
    public static class VeritabaniIslemleri
    {
        public static void VeriEkle(string isim)
        {
            var d = new VeriTabani();
            d.Tablo.Add(new Tablo
            {
                Isim = isim,
                IsDelete = false
            });

            d.SaveChanges();
        }

        public static void VeriGuncelle(int id)
        {
            var d = new VeriTabani();
            var veri = d.Tablo.FirstOrDefault(x => x.Id == id);
            veri.Soyisim = "GÖRÜN";
            d.SaveChanges();

        }

        public static void VeriGetir()
        {
            var d = new VeriTabani();
            var sonuc = d.Tablo;
            foreach (var item in sonuc)
            {
                Console.WriteLine(item.Isim);
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            VeritabaniIslemleri.VeriEkle("Beren Kuday");
            VeritabaniIslemleri.VeriEkle("Fatih Terim");
            VeritabaniIslemleri.VeriEkle("Milan Baroş");
            VeritabaniIslemleri.VeriEkle("Arda Turan");
            VeritabaniIslemleri.VeriEkle("Lincoln");
            VeritabaniIslemleri.VeriEkle("Melo");

            VeritabaniIslemleri.VeriGuncelle(1);

            VeritabaniIslemleri.VeriGetir();
        }
    }
}

App.config Dosyası:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
   <add name = "VeriTabaniContext"
      connectionString = "Data Source=KUDAYPC;Initial Catalog=VeriTabani;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
      providerName = "System.Data.SqlClient"/>
</connectionStrings>
</configuration>

Bu aşamadan sonra Packafe Manager Console'u açmamız gerekmektedir. Burada yapacaklarımız migration işlemleri olacaktır. Yani veritabanımızla tablolarımızı oluşturacağız. Yapacağımız komutlar sırasıyla:

  1. Enable-Migrations: Migration işlemi yapamıza izin verecek komut.
  2. Add-Migration: Bizim için gerekli migration dosyalarını oluşturaak komut.
  3. Update-Database: Oluşturulan dosyalardaki işlemleri veritabanına yansıtacak komut.

Artık veritabanımız ve tablomuz oluşturuldu projemizi başlatabiliriz. Projeyi çalıştırdığımızda karşımıza gelecek ekranda:

Beren Kuday
Fatih Terim
Milan Baroş
Arda Turan
Lincoln
Melo
Press any key to continue . . .

Yazacaktır ayrıca veritabanını kontrol ederseniz, yapılan işlemlerin veri tabanına da yansıdığını göreceksinizdir. İyi çalışmalar dilerim.

Kategori:C SharpMSSQL

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir