Ö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.
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.
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;
<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.<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.
//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);
}
}
}
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?


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.