Profil Resmi - Hakan Kuyrukçu
Hakan Kuyrukçu
Software Developer
Blog - Detay

Asp.net MVC Code First Kullanımı

26.08.2019 Tarihinde Oluşturuldu
Asp.net MVC Code First Kullanımı - Blog | Hakan Kuyrukçu

Öncelikle Merhaba,

Bugün ORM (Object Relational Mapping) araçlarından C# yazılım dili üzerinde sıklıkla kullanılan Entity Framework'ü kullanıcaz. Entity Framework'ün içerisinde veritabanına erişmek adına bir çok farklı seçenek mevcut bulunmaktadır. Biz ise bu sefer Code first methodunu kullanıyor olacağız.

Code First nedir ?

Veritabanını öncelikle kodsal olarak projemizin içerisinde oluşturup sonrasında bunu veritabanı sağlayıcımıza aktarmaktayız. Bu yüzden ismi "code first" yani türkçe karşılık olarak "kod öncelikli" yada "önce kod" olarak çevirebiliriz.

İşlem Adımları

1. Adım

Visual studio menülerinden Tools > NuGet Package Manager > Manage NuGet Packages for Solution üzerinden NuGet Package Manager açılır.


2. Adım

Açılan pencere üzerinden "Browse" sekmesine gelerek "Entity Framework" paketi projemiz içerisine yüklenir.


3. Adım

Projeniz içerisinde bulunan bir klasöre (ben mvc yapısını takip ederek bu klasörü Models klasörü olarak belirledim.) tablolarımızı oluşturmaya başlıyoruz. Tabloları oluştururken kullanacağımız yapı klasik class ve property yapısıdır.

namespace AspNetMvcCodeFirst.Models
{
    public class Products
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
    }
}


4. Adım

Yine aynı şekilde models klasörü içerisinde "Tables" isminde bir klasör oluşturuyoruz. Bu klasöre her tablomuz için sütun özelliklerini barındıran bir kişiselleştirme dosyaları oluşturacağız.


5. Adım

1 önceki adımda bahsettiğim klasör içerisine oluşturduğumuz tablolar için özelleştirme dosyalarını oluşturuyoruz.

namespace AspNetMvcCodeFirst.Models.Tables
{
    public class ProductsTable : EntityTypeConfiguration
    {
        public ProductsTable()
        {
            // Primary Key
            this.HasKey(t => t.ProductID);

            // Column Property
            // Set auto increment value on selected column
            this.Property(t => t.ProductID)
                .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
            // Set required and max length property on selected column
            this.Property(t => t.ProductName)
                .IsRequired()
                .HasMaxLength(40);

            // Table And Table Columns
            this.ToTable("Products");
            this.Property(t => t.ProductID).HasColumnName("ProductID");
            this.Property(t => t.ProductName).HasColumnName("ProductName");
        }
    }
}


6. Adım

Code first olarak oluşturduğumuz veritabanının etkileşime geçeceği bir bağlantı cümlesi ekleyeceğiz. Tüm veritabanı işlemlerini gerçekleştirmek için bu bağlantı bilgilerini kullanacaktır. Bu bilgileri barındırması için Web.config dosyası üzerinde işlemler yapacağız. Altta bulunan kod parçasını "<configuration>" özelliğinin alt özelliği olarak ekleyeceğiz.

<connectionStrings>
    <!-- Setup this line to your database configurations -->
    <add name="CodeFirstConnection" connectionString="Data Source=YOUR-DATA-SOURCE; Initial Catalog=YOUR-DB-NAME; Integrated Security=SSPI; User ID=YOUR-DB-USERNAME;Password=YOUR-DB-PASSWORD;" providerName="System.Data.SqlClient" />
</connectionStrings>


7. Adım

Şimdi ise en önemli kısım olan oluşturduğumuz sınıflarımızı gerçek tablolara dönüştürme zamanı. Yine metotlara eklemiş olduğum yorum satırlarından ne işe yaradıklarının çıkartımını yapabilirsiniz. Genel anlamıyla bu sınıf veritabanın içerisinde bulunucak tabloları ve bu veritabanın bağlantı bilgilerini barındırmaktadır.

namespace AspNetMvcCodeFirst.Models
{
    public class CodeFirstContext : DbContext
    {
        static CodeFirstContext()
        {
            Database.SetInitializer<CodeFirstContext>(null);
        }

        /// <summary>
        /// In the constructor method, we specify the connection string to be based on.
        /// This connection string created on web.config file.
        /// </summary>
        public CodeFirstContext() : base("Name=CodeFirstConnection")
        {
        }

        // All tables declared for Seed Method in Migrations/Configuration.cs
        public DbSet Products { get; set; }

        /// <summary>
        /// All tables properties set for model creating
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new ProductsTable());
        }
    }
}


8. Adım

Tüm sistemler hazır. Şimdi veritabanı sağlayıcımıza yani benim için Sql Server'a değişiklikleri haber vericek bir yapıya sahip olmamız gerekmektedir. Bu yapı için "migration" kullanılmaktadır. Migration işlemlerini gerçekleştirmek için Visual Studio menüsü üzerinden "Tools > NuGet Package Manager > Package Manager Console" açılır. Bu konsolu daha önce kullanmadıysanız ekranın alt bölümünde windows konsole benzer şekilde açılıcaktır. Öncelikle migration etkinleştirmek için altta bulunan kodu konsolumuza yazıyoruz. İşlemler tamamlandıktan sonra "Solution Explorer" üzerinden projenizi kontrol ettiğinizde "Migrations" adında bir klasör oluşturulmuş ve içerisinde "Configuration" adında bir dosya oluşmuş olacaktır.

Enable-Migrations


8. Adım

Her tablolar üzerinde yaptığınız değişiklikten sonra oluşturmanız gereken migration'ı oluşturmak için alttaki kodu konsol üzerinde yazmanız gerekmektedir. Bu işlem bir nevi proje versiyonlama gibi görünmektedir. Her eklediğiniz migration siz bir etkide bulunmazsanız migrations klasörü altında saklı tutulucaktır. Veritabanı oluşturma esnasında bu migrations'lar göz önüne alınarak işlemler gerçekleştirilicektir.

Add-Migration MIGRATION-ISMI


9. Adım

Ve Son olarak veritabanı değişikliklerini güncellemek veya veritabanını oluşturmak için altta bulunan kod konsol üzerinden yazılmaktadır. Bu işlemden sonra herhangi bir hata almadığınız taktirde veritabanı sağlayıcımızı kontrol ettiğimizde oluşmuş ve güncellemelerin gerçekleşmiş olduğunu görürüz.

update-database

GitHub üzerindeki proje örneğine buradan ulaşabilirsiniz.


Not: İşlemler Visual Studio 2019 ve SQL Server 2017'e göre gerçekleştirilmiştir.

Seo Tagları: asp.net, mvc, c#, code, first, orm, entity, framework, visual studio, orm