8 Kasım 2015

Asp.Net MVC ve Entity Framework İle Veritabanı İşlemleri (Veri Ekleme)

Merhabalar,

Bu yazım Asp.Net MVC ve Entity Framework İle Veritabanı İşlemleri adı altında yazacağım 2. yazım. Bugün sizlerle Entity Framework'te veritabanına veri ekleme işlemini gerçekteştireceğiz.

Önceki yazımda oluşturduğum MVC projemle devam edeceğim. İlk olarak bir controller oluşturalım. Controllers klasörüne sağ tıklayıp Add > Controller diyelim ve yeni bir controller ekleyelim:

 

Ardından Visual Studio'da projemize sağ tıklayıp Add > New Folder diyerek yeni bir klasör oluşturalım. Ben klasörüme Business adını verdim. Oluşturduğumuz bu klasöre de sağ tıklayıp Add > Class seçenekleri ile beraber bir class oluşturuyoruz. Bu bizim bir nevi business katmanımız olacak ve metodlarımızı buraya yazacağız. Ben adını NWBusinessLogic.cs olarak verdim. İsterseniz NWBusinessLogic katmanında yazacağımız metodlarımızı siz direkt olarak controller'ın içine de yazabilirsiniz, ben bu şekilde tercih ettim, kafanız karışmasın.

Bu hazırlıklardan sonra NWBusinessLogic.cs dosyamızda, NorthWind veritabanından Customers tablosuna veri kaydeden bir method yazalım:

using BlogEFApp.Models; //NORTHWNDEntities'i kullanabilmek için bunu eklememiz gerekiyor
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace BlogEFApp.Business
{
    public class NWBusinessLogic
    {
        public int SaveCustomer(Customers Customer)
        {
            using(var ctx = new NORTHWNDEntities())
            {
                ctx.Customers.Add(Customer);
                return ctx.SaveChanges();
            }
        }
    }
}

Bu metodu birazdan CustomerController'da kullanacağız. Öncesinde CustomerController'a şunu yazalım:

        [HttpGet]
        public ActionResult Insert()
        {
            return View();
        }

Bunu yazdıktan sonra süslü parantezlerin içine sağ tıklayarak Add View diyoruz ve karşımıza çıkan ekranda aşağıdaki düzenlemeleri yapıyoruz:


Bu şekilde eklediğimiz View sizin verilerinizi girip Customers tablosuna insert yapabileceğiniz bir alanı sizin için oluşturuyor ki 'razor view engine' ile oluşturulan bu kodlar şöyle:

@model BlogEFApp.Models.Customers

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Insert</title>
</head>
<body>
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
   
    @using (Html.BeginForm()) {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
   
        <fieldset>
            <legend>Customers</legend>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.CustomerID)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.CustomerID)
                @Html.ValidationMessageFor(model => model.CustomerID)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.CompanyName)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.CompanyName)
                @Html.ValidationMessageFor(model => model.CompanyName)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.ContactName)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.ContactName)
                @Html.ValidationMessageFor(model => model.ContactName)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.ContactTitle)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.ContactTitle)
                @Html.ValidationMessageFor(model => model.ContactTitle)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.Address)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Address)
                @Html.ValidationMessageFor(model => model.Address)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.City)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.City)
                @Html.ValidationMessageFor(model => model.City)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.Region)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Region)
                @Html.ValidationMessageFor(model => model.Region)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.PostalCode)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.PostalCode)
                @Html.ValidationMessageFor(model => model.PostalCode)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.Country)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Country)
                @Html.ValidationMessageFor(model => model.Country)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.Phone)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Phone)
                @Html.ValidationMessageFor(model => model.Phone)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.Fax)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Fax)
                @Html.ValidationMessageFor(model => model.Fax)
            </div>
   
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
   
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
</body>
</html>


Buradaki <div>
             @Html.ActionLink("Back to List""Index")
         </div
kısmına şimdilik gerek yok, silebiliriz. Buraya çeşitli eklemeler yapabilirsiniz. Sonrasında CustomerController'a Customers tablosuna View'dan girdiğimiz veriyi Insert edecek Post Action'ını yazalım ama öncesinde şunları da CustomerController'ımıza ekleyelim:

using BlogEFApp.Business;
using BlogEFApp.Models;


Action da bu:

[HttpPost]
public ActionResult Insert(Customers Customer)
{
      //Daha önce oluşturduğumuz iş katmanındaki SaveCustomer metodunu çağırmak için               //NWBusinessLogic object'i üretiyoruz. nwBusiness object'i ile birlikte         
      //NWBusinessLogic'e yazdığımız ve yazacağımız metodlarımıza erişim sağlayabiliriz.

      NWBusinessLogic nwBusiness = new NWBusinessLogic();  
      nwBusiness.SaveCustomer(Customer);  
      return View();
} 


Evet veri kaydedeceğimiz Insert Action'ı hazır. Build edip çalıştırıyoruz ve kaydedeceğimiz bilgileri gelen ekrana giriyoruz:


Benim girdiğim bilgiler Customers tablosuna aşağıdaki gibi kaydedildi:


Burada Customers tablosundaki Primary Key alanı Auto Incremet değil. Bu nedenle View içinde bu alan için de bir yer oluşturduk ancak Auto Increment bir değer olsa idi burayı oluşturmayacak ve elle girmeyecektik. Ayrıca browser'daki linke dikkat ederseniz önce Controller adı ve ardından Action adı geliyor. Bu link bize yukarıdaki view'ı gösterecektir ve burada oluşturduğumuz Customers türündeki nesne Post olan Insert action'ı tarafından alınacak ve yazdığımız SaveCustomer metodu sayesinde veritabanımızdaki Customers tablosuna kaydedilecektir.

Yazımın sonuna geldim. Sonraki yazımda kayıtları listeleme ve düzenleme kısmını anlatacağım. Herkese kolay gelsin.



Hiç yorum yok:

Yorum Gönder