Entity Framework Core Data Annotations Kullanımı Bölüm 2

Bu derste de Required, Primary Key, Max Length ve Not Mapped data annotationslarının kullanımına değineceğim. Uygulamamızda şu anda iki tane tablomuz var, Kategori ve Tur tablosu. Ben bir tablo daha ekleyeceğim, bu tablom Kitap tablosu olacak. Kitap tablom ile Kategori tablom arasında birebir ilişki olacak. Çünkü her bir kitabın kategorisi olmak zorunda.

Detaylı ders anlatımı ve kod takibi için video eğitim:

Öncelikle uygulamam da Model katmanında models klasörüne sağ tıklıyor ve yeni bir class ekliyorum adını da Kitap verdim. İçine birkaç tane property ekliyorum.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GRSYKitapEvi_Model.Models
{
    [Table("tb_Kitap")]
    public class Kitap
    {
        [Key]
        public int Kitap_Id { get; set; }

        [Required]
        public string KitapAdi { get; set; }

        [Required]
        public double Fiyat  { get; set; }

        [Required]
        [MaxLength(13)]
        public string ISBN { get; set; }

        [NotMapped]
        public double indirimliFiyat { get; set; }

    }
}

Burada yer alan;

Key : Bir kolonun primary key olmasını sağlamak için kullanılan data annotation’dur.

Required: Bir alanın null olarak geçilmemesini sağlamak için kullanılan data annotation’dur.

MaxLength: Bir alanın maksimum karakter sayısını belirtmek için kullanılan data annotation’dur.

MinLength: Bir alanın minimum karakter sayısını belirtmek için kullanılan data annotation’dur.

NotMapped: Bir alanın veritabanı tarafına yansıtılmaması için kullanılan data annotation’dur.

Akabinde database tarafına yansıtabilmek için ApplicatonDbContext içine tablomu DBSet olarak ekliyorum.

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 options) : base(options)
        {

        }

        public DbSet< Kategori> Kategoriler { get; set; }
        public DbSet< Tur> Turler { get; set; }
        public DbSet< Kitap> Kitaplar { get; set; }
        
       
    }
}

Daha sonra package manager console ekranında add-migration EkleKitapTablosuDb diyerek migration oluşturulmasını sağlıyorum.

namespace GRSYKitapEvi_DataAccess.Migrations
{
    public partial class EkleKitapTablosuDb : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "tb_Kitap",
                columns: table => new
                {
                    Kitap_Id = table.Column< int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    KitapAdi = table.Column< string>(type: "nvarchar(max)", nullable: false),
                    Fiyat = table.Column< double>(type: "float", nullable: false),
                    ISBN = table.Column< string>(type: "nvarchar(13)", maxLength: 13, nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_tb_Kitap", x => x.Kitap_Id);
                });
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "tb_Kitap");
        }
    }
}

Database tarafına yansıtmak için de package-manager console ekranımda update-database komutunu veriyorum.

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

Bir cevap yazın

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