ENTITY FRAMEWORK CORE MVC VERİ KAYIT VE GÜNCELLEME İŞLEMİ NASIL YAPILIR? – 2. BÖLÜM

Son dersimizde Kategori tablosundan verileri çekip buna ilişkin olarak ilgili seçtiğimiz veriye dair ID bilgisini getirtebilmiştik. Bu derste de şimdi işin kalan kısmını yapacağım, yani var olan verinin güncellenmesi ve yeni bir verinin desteklenmesi işlemlerini gerçekleştireceğiz.

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

Kategori için Insert_Update view sayfama bakıldığında ben buradaki formu hatırlarsınız ki Post metodu ile oluşturmuştum. Şimdi benim buna ilişkin olarka ilgili KategoriController’a dönüp burada bir post metodu yazmam lazım.

Benim ilk yazdığım Update_Insert metodu aslında get action işlemi için kullandığım metot. Kodlarımı yazıyorum:

[HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Update_Insert(Kategori obj)
        {
            if (ModelState.IsValid)
            {
                if (obj.KategoriId == 0)
                {
                    //Create (Oluşturma)
                    _db.Kategoriler.Add(obj);
                }

                else
                {
                    //Update (Güncelleme)
                    _db.Kategoriler.Update(obj);
                }

                _db.SaveChanges();
                return RedirectToAction(nameof(Index));
            }

            return View(obj);

        }

Burada attribute olarak MVC’de bu metodumu HttpPost olarak belirtmem gerek o yüzden bu attribut’ü ekledim. Akabinde eklediğim ValidateAntiForgeryToken attribute ise güvenlik amacı ile eklediğim bir attribute. Client tarafından gelecek olan talebin, gerçekten sitenin ön yüzünden geldiğini anlamak için MVC’nin bize sunmuş olduğu oldukça güzel bir özellik AntiForgeryToken.

Daha sonra ModelState durumunu kontrol ediyorum. Eğer burada her şey uygunsa (data annotationslara bağlı olarak) obj nesnem için KategoriId durumunu kontrol ediyorum. KategoriId 0 ise demek ki daha önceden var olan bir kayıt değil, yeni bir kayıt ekleme işlemi yapacağım. Eğer 0 değil ise bir Id değeri dönüyor ise var olan bir kayıt üzerinde çalışacağım yani update işlemi yapacağım.

Sonra _db nesnem züerinden ekleme ve güncelleme işlemi için metotlarımı ekliyorum. Veritatabanı için değişikliklerin kaydedilmesi için de SaveChanges metodunu kullanıyorum.

KategoriController tüm kodları:

using GRSYKitapEvi_DataAccess.Data;
using GRSYKitapEvi_Model.Models;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace GRSYKitapEvi.Controllers
{
    public class KategoriController : Controller
    {
        private readonly ApplicationDbContext _db;

        public KategoriController(ApplicationDbContext db)
        {
            _db = db;
        }

        public IActionResult Index()
        {
            List< Kategori> objList = _db.Kategoriler.ToList();
            return View(objList);
        }

        public IActionResult Update_Insert(int? id)
        {
            Kategori obj = new Kategori();
            if (id==null)
            {
                return View(obj);
            }

            obj = _db.Kategoriler.FirstOrDefault(a => a.KategoriId == id);

            if (obj == null)
            {
                return NotFound();
            }

            return View(obj);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Update_Insert(Kategori obj)
        {
            if (ModelState.IsValid)
            {
                if (obj.KategoriId == 0)
                {
                    //Create (Oluşturma)
                    _db.Kategoriler.Add(obj);
                }

                else
                {
                    //Update (Güncelleme)
                    _db.Kategoriler.Update(obj);
                }

                _db.SaveChanges();
                return RedirectToAction(nameof(Index));
            }

            return View(obj);

        }
    }
}

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

Bir cevap yazın

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