Entity Framework İle Veritabanı İşlemleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Entity Framework İle Veritabanı İşlemleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

15 Kasım 2015

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

Merhaba,

Önceki yazımda anlattıklarımdan sonra bu yazıda EF ile veri listeleme işlemini yapacağız. Önceki projemiz üzerinden devam edelim.

İlk olarak CustomerController'a Customer listeleyecek bir Action yazalım ve parantezleri içine sağ tıklayıp Add View diyelim:

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


Oluşturduğumuz bu View bizim için List.cshtml içinde aşağıdaki kodu üretti:

@model IEnumerable<BlogEFApp.Models.Customers>

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>List</title>
</head>
<body>
    <p>
        @Html.ActionLink("Create New", "Insert")
    </p>
    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.CustomerID)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.CompanyName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ContactName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ContactTitle)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Address)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.City)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Region)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.PostalCode)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Country)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Phone)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Fax)
            </th>
            <th></th>
        </tr>
   
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.CustomerID)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CompanyName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ContactName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ContactTitle)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Address)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.City)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Region)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PostalCode)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Country)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Phone)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Fax)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
        </tr>
    }
   
    </table>
</body>
</html>


Buradaki @Html.ActionLink("Create New""Create")'da Create yazan yere önceki yazımda Customers tablosuna kayıt atmak için oluşturduğumuz Action'ın adı olan Insert yazarsak Create New yazısına tıkladığımızda yeni kayıt yaptığımız Insert View'ı açılacaktır. Küçük bir not olarak paylaşmak istedim.

Daha önce oluşturduğumuz NWBusinessLogic.cs içine de Customers tablosunu listeleyen (kritersiz) bir metod yazalım:

        public List<Customers> ListCustomer()
        {
            using (var ctx = new NORTHWNDEntities())
            {
                return ctx.Customers.ToList();
            }
        }

Şimdi bu metodu hiç vakit kaybetmeden CustomerController'daki List Action'ında kullanalım:

       [HttpGet]
        public ActionResult List()
        {
            NWBusinessLogic nwBusiness = new NWBusinessLogic();
            return View(nwBusiness.ListCustomer());
        }

Daha önce de belirttiğim gibi sizler ayrı bir yerde metodlarınızı yazmak yerine direkt controller'ın içinde de aynı işlemi yaptırabilirsiniz. Ben yukarıdakini tercih ediyorum.

Build edip çalıştıralım ve browser'a şu linki yazalım: /Customer/List. Customers tablosundaki verilerin şu şekilde listelendiğini göreceksiniz:


Sonraki yazımda da bu listeleme üzerinden kayıt seçip düzenleme (edit) işlemini anlatacağım.

Kolay gelsin.



Devamını oku ...

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.



Devamını oku ...