Asp.Net Mvc – Code First ile Veritabanı İşlemleri 2 (Asp.Net Mvc Yazı Dizisi – 12)

Önceki Yazı : Asp.Net Mvc – Code First ile Veritabanı İşlemleri – Proje Başlangıcı (Asp.Net Mvc Yazı Dizisi – 11)​​

Merhaba Arkadaşlar,

Bir önceki yazımızda, veritabanını code first ile modellemiştik. Modelimizi oluştururken yalnızca, c# tarafında sınıflarımızı kullanmıştık.

Bugünkü dersimizde ise, oluşturduğumuz bu sınıflarımızı veritabanına nasıl tablolar halinde yansıtacağımızı inceliyor olacağız.

Şimdi adım adım projemiz üzerinde çalışmaya devam edelim.

  • Önceki dersimizde oluşturduğumuz, MvcProjesi isimli projeyi açalım.
  • Ana dizinimizde bulunan, Data klasörüne sağ tıklayarak Add>Class diyelim ve adını MvcProjesiContext olarak güncelleyelim.

Biraz bu Context sınıfımızdan bahsedecek olursak, oluşturmuş olduğumuz sınıfları topladığımız ve bu topladığımız sınıfları veritabanına yansıtacak sınıftır diyebiliriz. Genellikle proje adına Context takısı eklenerek kullanılır. Ancak bu zorunlu değildir. İsim konusunda serbestsiniz.

  • Eklediğimiz sınıfın içeriğini aşağıdaki gibi değiştirelim. (Açıklamalar yorum satırı olarak kodlara eklenmiştir.)
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace MvcProjesi.Data
{
    //Öncelikle sınıfımızı, DbContext sınıfından implemente ediyoruz. Böylelikle, DbContext sınıfının özelliklerini
    //kullanabiliyor olacağız.
    public class MvcProjesiContext : DbContext
    {
        //Daha sonra veritabanımızda, tablo olarak temsil edilecek tüm sınıflarımızı DbSet<..> içerisinde tek tek
        //çağırıyoruz. Sonuna s takısı koyduğumuza dikkat edin. Böylelikle bunun tablo olduğunu anlıyor olacağız.
        //Önceki yazımızda bahsettiğimiz gibi, sonunda zaten s olan bir sınıf ismimiz varsa, bu sefer de s takısını
        //kaldırabiliriz.
        public DbSet<Etiket> Etikets { get; set; }
        public DbSet<Makale> Makales { get; set; }
        public DbSet<Uye> Uyes { get; set; }
        public DbSet<Yorum> Yorums { get; set; }
    }
}

Şu an sınıflarımız, veritabanına yazılmaya hazır hale geldiler. Ancak burada şöyle bir sorun çıkıyor karşımıza; hangi veritabanına, nasıl yazılacak. Bir şekilde bunları, bilidiriyor olmamız lazım. Nasıl bildireceğiz?

Bunun için yapmamız gereken şey, ana dizinde bulunan web.config dosyasını açmak ve içerisine bildirimi eklemek olacak. 

Hemen yapalım;

  • Ana dizinde bulunan web.config dosyasına girelim. <connectionStrings> satırını bulalım. Dikkat edeceğiniz üzere, DefaultConnection isimli bir connectionstring halihazırda tanımlı durumda. Biz bu Connection String'i silip, onun yerine kendi bağlantı cümlemizi yazıyor olacağız.
  • DefaultConnection'u sildikten sonra aşağıdaki satırı <connectionStrings>...</connectionStrings> arasına ekleyelim.
<add name="MvcProjesiContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MvcProjesi;Integrated Security=True" providerName="System.Data.SqlClient" />

Burada dikkat etmemiz gereken konu, Context sınıfı olarak kullandığımız sınıf adını, tam olarak name kısmına yazmamız gerektiğidir. Ayrıca Data Source=(LocalDb)\v11.0 ile Visual Studio 2012 ile gelen, ayrıca Sql Server 2012 tarafından da sağlanıyor olan, Local Db sistemini kullanıyor olacağız. 

Local Db : Normalde bir bilgisayarda, Sql Server kullanmamız gerektiğinde, Sql Server Express kurarız (Ücretsiz olarak düşündüğümüzde). Bu ise uzun süren kurulum ve zor yapılandırma demek. Yeni gelen bu Local Db özelliğinde ise sistem, Sql'e erişim isteği duyduğu an, Sql Server başlatılır (çekirdek bileşen). İhtiyaç ortadan kalktığı an ise kendisini otomatik olarak kapatır. Kurulum boyutu 33 Mb'dır ve Visual Studio 2012,2013 ve Sql Server 2012 kurulumunda varsayılan olarak sisteme kurulur.

Biz bağlantı cümlemizde, Localdb'yi kullanması gerektiğini, tablo adı olarak ta, MvcProjesi adını kullanması gerektiğini söylemiş olduk. IntegratedSecurity=True ile de, şu an kullandığımız, Windows kullanıcı hesabını kullanmasını söyledik.

Bu yaptığımız ayarlar doğrultusunda, veritabanının oluşması için bir tetikleyiciye ihtiyacımız olacak. Normalde Code First'te veritabanı oluşturulmamış olduğunda, veritabanı üzerinden bir işlem yapılmak istendiğinde, otomatik olarak tablolar oluşturulmaktadır. 

Biz bunun yerine biraz daha profesyonel bir çözüm yapalım.

  • Ana dizinde bulunan global.asax dosyasını açıp, içini aşağıdaki gibi güncelleyelim.
//Veritabanı context sınıfımızı referans veriyoruz
using MvcProjesi.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace MvcProjesi
{
    public class MvcApplication : System.Web.HttpApplication
    {
        //Uygulama ilk başlatıldığında, buradaki metod çalışacak.
        protected void Application_Start()
        {
            //Burada veritabanı sınıfımızdan, bir nesne oluşturuyoruz. using kullanmamızın sebebi,
            //db nesnesinin işi bittiğinde, silinmesini ve hafızada yer tutmamasını sağlamak.
            using (MvcProjesiContext db = new MvcProjesiContext())
            {
                //Bu metod, eğer veritabanımız oluşturulmamış ise, oluşturulmasını sağlıyor.
                db.Database.CreateIfNotExists();
            }
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}
  • Son değişikliğimizi de yaptıktan sonra, F5 tuşu ile projeyi çalıştıralım.

Sunucu hatasıYukarıdaki hatayı aldık. Bunun sebebi, henüz Controller ve View yazmamış olmamızdan dolayı. Bu beklenen bir hataydı. Bizim asıl amacımız, veritabanını oluşturmaktı. Bakalım oluşmuş mu?

  • Bazılarınızın bilgisayarında, Sql Server Management Studio kurulu olmadığını varsayarak, veritabanı incelemesini Visual Studio üzerinden yapalım.
  • Öncelikle menüde View>Server Explorer'e tıklayalım.

Server explorer

  • Veritabanı yönetim penceresi açılmış bulunmaktadır.

Server yönetim paneli

Evet, görüldüğü üzere tablolarımız, otomatik olarak Code First'ün desteğiyle veritabanımızda oluşturulmuş oldu.

Veritabanı katmanımız, böylelikle hazır oldu.

Bundan sonraki derslerimiz de, projemize devam ediyor olacağız.

Projenin son halini buradan indirebilirsiniz.

Hepinize kolaylıklar diliyorum.