Azure DB ile Mvc’de Code First İşlemleri. BÖLÜM -1

Selamlar arkdaşlar. Bugün code first üzerine biraz konuşacağız. Amacı isiminden de anlaşılacağı gibi önce kod yazılıp sonra ilgili DB’yi oluşturmaktır.Ama herzaman bu şekilde kullanılmayabilir.Yapılan unit testlerle, belirlenen senaryoya göre gerekli ihtiyaçların çıkarılması ve bu ihtiyaçlara yönelik ilgili modellerin oluşturulması bir projenin başlangıç adımları olabilir. Bu modeller bize gerçek resmi gösteren en büyük materyallerdir. Bu objectler POCO(Plain Old CLR Object) şeklinde isimlendirilirler. Bunlar bizim database’deki tablolarımıza karşılık gelen objectlerdir.Ve entitiy framwork, gerçekte veritabanımızda bu tablolar yok ise,  çalışma zamanında biz herhangi bir müdahalede bulunmamış isek oluşturulurlar. Bir de Context diye tabir edilen sınıflarımız vardır.Bunlar da model içerisindeki POCO tiplerine ait koleksiyolara erişimi sağlarlar. Code First’ün 2 farklı türü vardır.

  1. On Existing Database(Yani var olan bir database üstünde çalışma)
  2. New Database(Olmayan bir database üstünde çalışma.)

codefirst

Biz bugün iş dünyasında daha fazla kullanılan var olan bir database üstünde konuşacağız. Öncelikle Azure üzerinde ScienceScholl adında Sql DB’mizi oluşturalım. Alttaki ekran görüntüsü buna aittir.sql

Şimdi connection string’i alalım ve sql server management studio’muzda azure’daki database’imize local DB’miş gibi erişelim.

Bu da bize azure ile çalışmanın nekadar kolay olduğunu gösteren güçlü bir örnektir. Önemli bir konu da azure üzerinde oluşturduğumuz ScienceScholl  database’ine local makinamızdan erişe bilmek için o an geçerli olan local IP’mize azure üzerinden izin vermeliyiz. Aşağıda azure üzerinde yarattığımız database’in connection bilgilerine ve IP adreslerinin yönetim ekranına nereden erişebileceğimizi görmekteyiz.

 

Azure2

sql3png

Evet herşey yolunda ise yaratmış olduğumuz ScienceScholl   database’inde tablolarımızı oluşturmaya başlıyalım. Tabi kendi local makinamızdan, Azure üzerine. sql table

Ayrıca Azure üzerinden tablolarımıza alttaki linkten erişebiliriz.

mngAzure

Örnek Ekran görüntüsü:

mngDB2

Tablolarımız arasındaki dependencies’ye ilk seviyeden yine azure üzerinden bakabiliriz. depen

Solutionımızda DAL diye yeni bir Class Library yaratıyoruz. Tüm DB işlerini bu library üzerinden yapıcaz. POCO’larımızı istersek kendi elimizle ekleyebiliriz. İstersek Tool yardımı ile var olan databaseimizden oluşturabiliriz. Ben bu örnekte tool ile oluşturdum. Visual Studio’da Add New Item / ADO.NET Entity Data Model / Codefirst From Database’den ilgili menüye ulaşılabilir.ado

cf

Azure üzerindeki ScienceScholl databasemize gerekli connection işlemleri yapılarak bağlanılır.Ve POCO’ları oluşturulacak tablolar seçilir. Aşağıda ekran görüntüsünü görmektesiniz.

tblModelPNG

Şimdi biraz da codelar üzerinde konuşalım. SchollClass POCO’su aşağıda görüldüğü üzere oluşturuldu. ClassName MaxLength’i 50 olarak attribute olarak [StringLength(50)] tanımlandı. Bu tarz [] ile yapılan tanımlanma şekline Data Annotations denmektedir. ClassStudent ile olan relation Virtual ICollection dizi şeklinde bir property ile belirtilmiştir. Gene DB’deki tablo karşılığı attribute ile [Table(SchollClass)] olarak belirtilmiştir. Bir de fluent denen configuration filelar vardır. Başka bir makalede derinlemesine fluentleri inceleyeceğiz.

Aşağıda görüldüğü üzere ClassStudent’da [Key] parametresi primary index olan StudentID’yi tanımlamaktadir. SchollClass ile olan relation virtual SchollClass propertysi ile, StudentLesson ile olan relation da StudentLesson  property’si ile belirtilmiştir.StudentLesson’da da relationlar  aynı şekilde tanımlanmıştır. [NotMapped] olarak tanımlanan propertylerin DB karşılıkları yoktur.Sadece projemiz içinde kendi özel amaçları için kullanılmaktadır.

Gelelim esas ScienceSchool DBContext classımıza: Aşağıda görüldüğü üzere DbContext’den inherit olmuştur. ClassStudent,SchollClass ve StudentLesson Classları DbSet ile property olarak atanmıştır.Kısacası tüm pokolarımızın tutulduğu classdır. OnModelCreating‘de ilgili classların colonlarının db’de propertyleri burada set edilmektedir. Constructor’ında  : base(“name=ScienceScholl”) yazısı ile connection strings’in App.config’deki adı belirtilmiştir.Constructor’daki SetInitializer(null) ise database’de  migration olmamasını ,uygulama çalıştırıldığı zaman ilgili db’nin yaratılma yada güncellemenin yapılmamasını sağlar.

Database.SetInitializer<ScienceSchool>(null);

OnModelCreating’de Tabloların colonlarının propertylerinin DB karşılıkları tanımlanmıştır.

Bir sonraki bölümde oluşturduğumuz DAL projemizi, yeni yapıcağımız bir Mvc  projemizde kullanıcaz. Bu yeni projemizde artık database işlemleri ile ilgili ayrı bir emek harcamamıza gerek yoktur. Artık sadece yapacağımız işe konsantre olabiliriz.

Geldik bir makalenin daha sonuna.

Yarın makalenin devamında görüşmek üzere hoşçakalın.

Not:Örnek Url : http://codefirstonazure.azurewebsites.net/

Source Code: http://www.borakasmer.com/projects/CodeFirstBlog.rar

Herkes Görsün:

Sevebilirsin...

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir