ADO.NET Entity Framework İle Veritabanı İşlemleri (SELECT,INSERT)

Administrator tarafından yayınlanmıştır 6. March 2010 07:42

Bir önceki makalemde  sizlerle  birlikte projelerimize ADO.NET  Entity Framework’ü nasıl ekleyeceğimizden bahsetmiştik.Şimdi bu makalemde iseADO.NET  Entity Framework katmanını ekledikten sonra  bunun üzerinde  veritabanı işlemlerini nasıl gerçekleştireceğiz bunun üzerinde duracağız.Veritabanı işlemlerimizi Linq to SQL  ile gerçekleştireceğiz. Her zamanki gibi File>>New  yapıp  Windows Application ‘ı seçiyoruz.Diğer  makalemde anlattığım şekilde ADO.NET Entity Framework katmanımızı ekliyoruz.Evet bu aşamaları geçtikten sonra aşağıdaki form görüntüsünü oluşturun ve bunun için gerekli olan elemanları kendi formunuz üzerine ekleyin.Form üzerine bir adet GroupBox,  4 adet TextBox, 5 adet Label, bir adet PictureBox, bir adet Buton, bir adet ComboBox  ve bir adet DataGridView ekliyoruz.Uygun şekilde düzenleyip aşağıdaki görüntüyü elde etmeye çalışın.

 

 
 Form düzenleme işlemini tamamladıktan sonra kendi projelerimden birine ait olan bir veritabanını bu uygulamada kullanmak istiyorum.Hazırlamış olduğum veritabanı tasarımı aşağıdaki şekildeki gibidir.
 
 

İlk bakışta veritabanı tasarımı yeni karşılaşanlar için karmaşık gözükebilir.Fakat biz bu veritabanı tasarımından bir kısım tabloları kullanacağız.Projenin tamamını açıkkaynak kodlu bir şekilde siteme koyacağım.Şimdi makalemize kaldığımız yerden devam edebiliriz.Bu aşamadan sonra ADO.NET Entity Framework’e ait nesneleri kullanabilmek için aşağıdaki başlık dosyalarını ekliyoruz.

usingSystem.Data.Entity;

usingSystem.Data.EntityClient;

Bu aşamadan sonra ilk önce select işlemi nasıl gerçekleştirilir.Bunun üzerinde duracağız.Proje’ye sağ tık yapıp yeni bir sınıf ekliyoruz ve aşağıdaki kodlarıyazıyoruz.

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Data.Common;

usingSystem.Data.Entity;

usingSystem.Data.EntityClient;

usingSystem.Data.EntityModel;

 

namespace MakaleEF

{

   

class StaticEntityClass

{

        public static EndustriMuhendisligiDersOgretimDBEntitiesOrnekEntity = new EndustriMuhendisligiDersOgretimDBEntities();

        //Kullanacağımızbütün özellikleri içinde barındıran bir contanier gibi olan entity nesnesinioluşturduk.

 

        //statik birfonksiyon ile oluşturulan nesne örneğini döndürüyoruz.Dönüş tipine dikkat ediniz.

        public static EndustriMuhendisligiDersOgretimDBEntitiesGetEntity()

        {

            returnOrnekEntity;//dönecek olan entity nesnesi...

        }

    }

}

Bu sınıfbize her noktadan erişebileceğimiz bir nesne döndürür.Böylece her yerde Entitynesnesi yaratmaktan kurtulmuş olur ve nesne yaratma işlemi bir kezgerçekleştirilip,bunun kontrolü bir noktadan sağlanmış olur.Şimdi DataGridimizidoldurmaya yaracak olan sınıfımızı tanımlayalım.Yine sağ tık yaparak bir Classekliyoruz ve aşağıdaki kodları ekliyoruz.

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Data.Common;

usingSystem.Data.Entity;

usingSystem.Data.EntityClient;

usingSystem.Data.EntityModel;

usingSystem.Windows.Forms;

 

namespace MakaleEF

{

    class OgrenciDataGridiDoldurClass

    {

        publicOgrenciDataGridiDoldurClass()

        {

            //boşkurucu...

        }

 

        //datagridiref ile gönderdik nedeni daha hızlı çalışması için.

        //bilirsinizkiref ile atılmayan parametreler bellekteki başka boş bir alana kopyalanarak atanıpkullanılırlar.

        //fakat refile sadece ilgili adres işaret edilir ve onun üzerinde yapılan değişiklikdirekt etkiye müsaittir.ve kopyalama işlemi yapmaz.

      

        public void DataGridiDoldur(refDataGridView Datax)

        {

            varSQL = from c inStaticEntityClass.GetEntity().Ogrenci.Include("Bolum").Include("Fakulte") select new{c.OgrenciAdi,c.OgrenciSoyadi,c.OgrenciNosu,c.OgrenciSinifi,c.Bolum.BolumAdi,c.Bolum.Fakulte.FakulteAdi,c.OgrenciResim};

            //bir üstsatırdaki kod parçası linq to sql kullanarak veritabanından istediğimiz yapıdakikayıt kümlerini çekmek için bizim işimize yarayacak olan kısımdır.

            //buradaInclude ifadeleri daha doğrusu fonksiyonları ile aslında arkaplanda birJoin'leme işlemi yapılıyor.(Yani INNER JOIN işlemi ;) )

            //selectnew ile hangi tabloların hangi alanları çekilecek onlar belirtiliyor.tabiunutmayalım bunlar asıl tablolar deil bunlar yasımaları arkaplandaki haritalamaişlemiyle bu yansıma nesneler gerçek fiziksel tablolar arasında bağ kuruluyor.

           

            Datax.DataSource=SQL;//gönderdiğimiz datagrid nesnesinin datasource'una yazdığımızlinq to sql cümlesi kaynak olarak atanıyor.

        }

    }

}

 

Bu sınıf form üzerindeki datagridi doldurmamıza yarıyor.Kodlara dikkat ederseniz T-SQL göre kullanımı daha efektif ve fonksiyonel böyle az satır kod ile işlemimizi hızlı bir şekilde yapabiliyoruz.İşte ADO.NET Entity Framework büyüsü deyişlerinizi duyar gibiyim J .Şimdi projemizin Form1.cs  kod sayfasında bulunan Form_Load  olayına aşağıdaki kodları ekliyoruz ve  F5 ‘e basıyoruz.Ardından aşağıdaki görüntüyü elde etmelisiniz.

Bu kodu Form_Load olayı içine yazınız.

OgrenciDatagrid = new OgrenciDataGridiDoldurClass();

OgrenciDatagrid.DataGridiDoldur(ref dtgridgenel);
 
 
 

Evet görüldüğü üzere kayıtları select ile çekmek bu kadar basit ve hızlı.Şimdi de öğrenci kaydı eklemek için gereken kodlarımızı ve sınıfımızı oluşturalım.Yine sağ tık deyip yeni bir Class ekliyoruz.Aşağıdaki kodları ekliyoruz.

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Data.Common;

usingSystem.Data.Entity;

usingSystem.Data.EntityClient;

usingSystem.Data.EntityModel;

usingSystem.Windows.Forms;

 

namespace MakaleEF

{

    class OgrenciYansimaClass

    {

        OgrenciOgrencim;//Ogrenci tablosunun yansıması olan nesnereferansı

        BolumBolume_Ekle;//Bolum tablosunun yansıması olan nesnereferansı

 

        publicOgrenciYansimaClass()//kurucu fonksiyon

        {

            Ogrencim = newOgrenci();//nesnelerebellekten gerekli yer ataması new operatörüyle yapılıyor.

            Bolume_Ekle = new Bolum();

        }

 

        public bool OgrenciEkle(stringAdi,string Soyadi,stringSinifi,string Numara,stringBolumu,string ResimYolu)

        {

            boolGecici = false;

            BolumBol = (from c inStaticEntityClass.GetEntity().Bolum where c.BolumAdi== Bolumu selectc).First();

            //yukardakikod parçası linq to sql yardımıyla metoda gelen bölüm adine uygun bir Bolum örneğiniFirst fonksiyonu yardımıyla çekliyor.

           

            try//try-catch blokları içinde hata kontrolunu ve yönetiminisağlıyoruz.

            {

                Ogrencim.OgrenciAdi = Adi;//fonksiyondan gelen Adi değişkenini yansıma nesne diyeadlandırdığım nesnenin OgrenciAdi niteliğine atıyoruz.

                Ogrencim.OgrenciSoyadi =Soyadi;//bütün bu işlemleri gerekli veriler,gerekliolan alanlarla eşleninceye kadar yapıyoruz.

                Ogrencim.OgrenciSinifi = Sinifi;//yalnız dikkat ederseniz bu eşlemeler gerçek tablo alanlarınakod yazma esnasında atanmıyor.Tabloların yansıması olanlara yapılıyor.

                Ogrencim.OgrenciNosu = Numara;

                Ogrencim.OgrenciSinifi =Sinifi;

                Ogrencim.OgrenciResim =ResimYolu;

                Bol.Ogrenci.Add(Ogrencim);//bu CSDL orneği içinde ilgili BolumID barındırıyor.buBolumID yi yeni eklenen ogrenci kaydının foreign keyi olan BolumID yeekliyor...

                //bir üst satırdakikod parçası,uygun bölüm örneğiyle öğrenci arasında bir ilişki olduğu için ayrıbir formatta eklenmeli.burada bu şekilde ekleme yaparak ilişkiye uygun kayıteklenmesi sağlıyor.bunu yapınca tutarlılık sağlanıyor aslında bir öğrenciyi bölümünüseçmeden kaydetmenize izin verilmemesini sağlıyor.

 

                StaticEntityClass.GetEntity().AddToOgrenci(Ogrencim);//burada ise hazırlanan öğrenci yansıma nesnesi veritabanınakaydediliyor.bu fonskyonu çağırmadan kayıt eklememiz söz konusu değildir.

               

                StaticEntityClass.GetEntity().SaveChanges(true);//yapılan ekleme işleminidoğrulama işlemini bildirmek için bu fonksiyonu çağırıyoruz.  

                Gecici = true;

            }

            catch (Exception ex)

            {

                Gecici = false;

                MessageBox.Show(ex.ToString());

            }

            returnGecici;// yapılan işlem eğer başarılıysa true değeridönecektir.

        }

    }

}

 

İşte kayıt eklemeyi gerçekleştirecek olan sınıfımız hazır.Şimdi kayıt eklemeye geçmeden önce ComboBox’ın datasource’una gerekli verilerin gelmesini sağlayacak olan  Linq to SQL cümlesini yazıcağız.ComboBox’ın Clickevent’ine aşağıdaki kodları yazıyoruz.

var SQL1 = from d in StaticEntityClass.GetEntity().Bolum select d.BolumAdi;

comboBox1.DataSource = SQL1;

Ve sonuç aşağıdaki gibidir. 
 
 
 

Şimdi son işlem olarak kayıt ekleme modülümüzü aktif hale getirmek gerekli.Bunun için SelectedIndexChanged fonksiyonu içerisine aşağıdaki kodları yazalım.Birde string tipinde SecilenBolum adı altında bir değişken tanımlayın.

 

//burada secilendeğeri string şeklinde alıp öğrenci kaydı eklerken kayıt ekleme sınıfımızaparametre olarak vereceğiz.böylece yeni eklenen öğrencinin bölümü belli olacakve ona göre bir bolum orneği çekilecektir.

SecilenBolum =comboBox1.SelectedValue.ToString();

Daha sonra resim seçebilmek için bir adet OpenFileDialog nesnesi ekliyoruz.Ve Göz At butonuna çift tıklayıp,aşağıdaki kodu yazıyoruz.Bu arada resim yolunu tutacak olan string tipinde bir değişken tanımlıyoruz.Ben string ResimYolu olarak tanımlıyorum.

openFileDialog1.ShowDialog();//openfiledialog penceresinin açılmasını sağlıyor.

            ResimYolu =openFileDialog1.FileName;//açtığı dosyanın yolunuResimYolu adlı değişkene atıyor.

            pctrboxogrenci.Image = Image.FromFile(ResimYolu);//budosya yolundaki resmi alıp picturebox'a yerleştiriyor.

            pctrboxogrenci.SizeMode = PictureBoxSizeMode.StretchImage;//dosyadan çekilen resmi picturebox boyutuna uydurmak içinStrecthImage modu seçiyoruz.

 

Bu işlemin ardından form üzerine bir adet ToolStrip nesnesi ekliyoruz.Ve bir tane toolStripLabel1 ekliyoruz. Adını Kaydet olarak Text özelliğinden değiştiriyoruz.ToolStrip’in Click olayına ise aşağıdaki kodları yazıyoruz.

 

if(OgrYansi.OgrenciEkle(textBox1.Text,textBox2.Text,textBox4.Text,textBox3.Text,SecilenBolum,ResimYolu))

            {

                MessageBox.Show("Kaydınız Veritabanına Eklenmiştir!");

           }

Son işlem olarak F5’e basıp uygulamayı çalıştırdığımızda aşağıdaki sonucu elde ediyoruz.
 
 
 

Makalemizin sonuna gelmiş bulunuyoruz.Bir sonraki ADO.NET Entity Framework ile ilgili makalemde delete,update işlemlerine değineceğiz.Umarım zevkle okuyacağız bir makale olmuştur.

 

Bir sonraki makalemde görüşmek dileğiyle…

 

BatuhanDüzgün  Sakarya Üniversitesi  Bilgisayar Mühendisliği 

Currently rated 2.5 by 4 people

  • Currently 2.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Ado.Net Entity Framework

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  July 2018  >>
MoTuWeThFrSaSu
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

Yazıları geniş takvimde göster