FLUENT API İLE TABLE NAME ve COLUMN NAME NASIL KULLANILIR?

Bu dersimizde Fluent Api ile bir tablo adı ve bir kolon adı nasıl değiştirilir buna değineceğim. Tablo adı değiştirmek için ToTable kullanılırken, kolon adını değişmek için HasColumnName kullanılmaktadır. Benim şimdi veritabanı kısmında tbl_Kategori diye bir tablom yok ben var olan Kategori classı üzerinden işlem yapacağım. Bir de ApplicationDbContext classımda daha önceden oluşturduğum Kategori DbSet’i comment olmaktan çıkaracağım. Fluent api ile tablo adına müdahale edeceğim. Ve yine fluent api ile tablo içinde KategoriAd olarak belirtilmiş kolon adını d KategoriAdi yapacağım.

Dersin detaylı anlatımı ve kod takibi için video eğitim:

ApplicationDbContext classıma geliyorum ve kodlarımı düzenliyorum. Aşağıdaki kısmı ekledim.

//Kategori Tablo Ad ve Kolon Ad
            modelBuilder.Entity< Kategori >().ToTable("tbl_Kategori");
            modelBuilder.Entity< Kategori >().Property(b=>b.KategoriAd).HasColumnName("KategoriAdi");

Ayrıca;

public DbSet< Kategori > Kategoriler { get; set; } 

çıkardım.

ApplicationDbContext classımın tüm kodlarının son hali:

using GRSYKitapEvi_Model.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GRSYKitapEvi_DataAccess.Data
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions< ApplicationDbContext> options) : base(options)
        {

        }

        public DbSet< Kategori> Kategoriler { get; set; }
        public DbSet< Tur> Turler { get; set; }
        public DbSet< Kitap> Kitaplar { get; set; }
        public DbSet< KitapDetay> KitapDetaylar { get; set; }
        public DbSet< YayinEvi> YayinEvleri { get; set; }
        public DbSet< Yazar> Yazarlar { get; set; }
        public DbSet< KitapYazar> KitapYazarlar { get; set; }
       

        public DbSet< FluentApi_KitapDetay> FluentApi_KitapDetaylar { get; set; }
        public DbSet < FluentApi_Kitap> FluentApi_Kitaplar { get; set; }
        public DbSet< FluentApi_Yazar> FluentApi_Yazarlar { get; set; }
        public DbSet< FluentApi_YayinEvi> FluentApi_YayinEvleri { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //Composite key oluşturma
            modelBuilder.Entity< KitapYazar>().HasKey(x => new { x.Yazar_Id, x.Kitap_Id });


            //FluentApi_KitapDetay İçin
            modelBuilder.Entity< FluentApi_KitapDetay>().HasKey(a => a.KitapDetay_Id);
            modelBuilder.Entity< FluentApi_KitapDetay>().Property(a => a.BolumSayisi).IsRequired();


            //FluentApi_Kitap için
            modelBuilder.Entity< FluentApi_Kitap>().HasKey(a => a.Kitap_Id);
            modelBuilder.Entity< FluentApi_Kitap>().Property(a => a.KitapAdi).IsRequired();
            modelBuilder.Entity< FluentApi_Kitap>().Property(a => a.Fiyat).IsRequired();
            modelBuilder.Entity< FluentApi_Kitap>().Property(a => a.ISBN).IsRequired().HasMaxLength(13);

            //FluentApi_Yazar
            modelBuilder.Entity< FluentApi_Yazar>().HasKey(a => a.Yazar_Id);
            modelBuilder.Entity< FluentApi_Yazar>().Property(a => a.YazarAd).IsRequired();
            modelBuilder.Entity< FluentApi_Yazar>().Property(a => a.YazarSoyad).IsRequired();
            modelBuilder.Entity< FluentApi_Yazar>().Ignore(a => a.AdSoyad);

            //FluentApi_YayinEvi
            modelBuilder.Entity< FluentApi_YayinEvi>().HasKey(a => a.YayinEvi_Id);
            modelBuilder.Entity< FluentApi_YayinEvi>().Property(a => a.YayinEviAdi).IsRequired();
            modelBuilder.Entity< FluentApi_YayinEvi>().Property(a => a.Lokasyon).IsRequired();

            //Kategori Tablo Ad ve Kolon Ad
            modelBuilder.Entity< Kategori>().ToTable("tbl_Kategori");
            modelBuilder.Entity< Kategori>().Property(b=>b.KategoriAd).HasColumnName("KategoriAdi");

        }
    }
}

İşlemim bitttikten sonra bir migration oluşturuyorum. Package Manager console ekranımda;

Add-migration FluentApiTableName_ColumnName

Yazdım ve migration oluştu.

using Microsoft.EntityFrameworkCore.Migrations;

namespace GRSYKitapEvi_DataAccess.Migrations
{
    public partial class FluentApiTableName_ColumnName : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropForeignKey(
                name: "FK_Kitaplar_tb_Kategori_KategoriId",
                table: "Kitaplar");

            migrationBuilder.DropPrimaryKey(
                name: "PK_tb_Kategori",
                table: "tb_Kategori");

            migrationBuilder.RenameTable(
                name: "tb_Kategori",
                newName: "tbl_Kategori");

            migrationBuilder.RenameColumn(
                name: "Ad",
                table: "tbl_Kategori",
                newName: "KategoriAdi");

            migrationBuilder.AddPrimaryKey(
                name: "PK_tbl_Kategori",
                table: "tbl_Kategori",
                column: "KategoriId");

            migrationBuilder.AddForeignKey(
                name: "FK_Kitaplar_tbl_Kategori_KategoriId",
                table: "Kitaplar",
                column: "KategoriId",
                principalTable: "tbl_Kategori",
                principalColumn: "KategoriId",
                onDelete: ReferentialAction.Restrict);
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropForeignKey(
                name: "FK_Kitaplar_tbl_Kategori_KategoriId",
                table: "Kitaplar");

            migrationBuilder.DropPrimaryKey(
                name: "PK_tbl_Kategori",
                table: "tbl_Kategori");

            migrationBuilder.RenameTable(
                name: "tbl_Kategori",
                newName: "tb_Kategori");

            migrationBuilder.RenameColumn(
                name: "KategoriAdi",
                table: "tb_Kategori",
                newName: "Ad");

            migrationBuilder.AddPrimaryKey(
                name: "PK_tb_Kategori",
                table: "tb_Kategori",
                column: "KategoriId");

            migrationBuilder.AddForeignKey(
                name: "FK_Kitaplar_tb_Kategori_KategoriId",
                table: "Kitaplar",
                column: "KategoriId",
                principalTable: "tb_Kategori",
                principalColumn: "KategoriId",
                onDelete: ReferentialAction.Restrict);
        }
    }
}

Akabinde ackage Manager console ekranımda;

Update-database dedim ve veritabanımı güncelledim. Aşağıdaki görselde görüleceği üzere tbl_Kategori gelmiş durumda ve kolon adı da KategoriAdi olarak verilmiş.

Bir sonraki derste görüşmek üzere.

Bir cevap yazın

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