DataGridView ile ADO.NET Entity Framework İlişkisi – 1

Sonunda hastayım. Gülümseme Biliyorum bunun gülünecek bir yanı yok hatta en sevmediğim hastalıklardan birini yaşıyorum. Boğazlarım şişti ve yediklerimden hiçbir şey anlamıyorum. Üzerimde bir kırgınlık var. Boğazlarımın şişikliği burnumun tıkanmasına sebep oluyor. Sanırım bu yüz ifadesi daha doğru olacak. Üzgün gülümseme Yine de bu hasta halim benim paylaşım yapmama engel olamıyor. İçimde çarşamba hatta perşembe gününden beri paylaşmak istediğim bir konu var. Heyecanla paylaşmak istiyordum. Fakat araya bu hastalık işi girince biraz gecikti. Sözü fazla uzatmadan konuya giriyorum. Amacımız her zaman olduğu gibi az kodla çok iş başarmak ve ilişkili bir veritabanından veri çekmek, yeni veri eklemek, güncelleme ve silme işlemlerini nasıl yapabileceğimizi Entity Framework tarafından inceliyor olacağız.

Öncelikle bir test projesi açıyoruz. Projemiz bir Windows Forms Projesi olacak. Projemize bir Compact SQL Server veritabanı ekliyoruz. Veritabanımız basit olacak. İki adet tablo içerecek ve bu tablolar birbirleri ile ilişkili olacaktır.

Projenin ilk görünümü

 

Veritabanı tablolarımız şunlar;

“Book” – Kitaplar Tablosu

Book tablosunun kolonları ve özellikleri.

“BookType” – Kitap Tipi Tablosu

BookType tablosunun kolonları ve özellikleri.

Tablolardaki “ID” kolonu “IDENTITY” olarak ayarlanmıştır. Bu veritabanımızı temsil edecek ve üzerinde işlemler yapacak bir ADO.NET Entity Framework Model’i oluşturalım.. “CTRL + SHIFT + A” ile projemize yeni bir nesne model ekliyoruz.

ADO.NET Entity Framework Model eklenmesi.

ADO.NET Entity Framework Model eklenmesi.

ADO.NET Entity Framework Model eklenmesi.

ADO.NET Entity Framework Model eklenmesi.

Böylece projemizin son hali böyle olacak.

image

Formumuza bir “DataGridView” koyuyoruz ve “Dock” özelliğini “Fill” ayarlıyarak tüm forma yayılmasını sağlıyoruz.

Form'a DataGridView eklenmesi.

Ardından projemize 2 adet “BindingSource” ekliyoruz. Bu kontroller bizim tablolarımızı temsil edecekler.. Sonrasında sırasıyla bu kontrollere tablolarımızı bağlıyoruz. Sırasıyla BindingSource’lar seçilir ve “Add Project Data Source..” kısmından Entity Model’imizin ilgili nesnesi seçilir.

Binding Source kontrollerinin eklenmesi.

Binding Source kontrollerinin DataSource ayarlarının yapılması.

Binding Source kontrollerinin DataSource ayarlarının yapılması.

Binding Source kontrollerinin DataSource ayarlarının yapılması.

BookBindingSource kontrolünün DataSource ayarlarının yapılması.

BookTypeBindingSource kontrolünün DataSource ayarlarının yapılması.

bookBindingSource” ‘u –> “Book” nesnesine ve “bookTypeBindingSource” ‘u –> “BookType” nesnesine bağladıktan sonra işlemlerimiz neredeyse bitmek üzere. Formumuzdaki “DataGridView1” ‘i seçiyoruz ve “Smart Tag” ‘ı kullanarak “DataSource” özelliğinde “bookBindingSource” ‘u seçiyoruz..

DataGridView1 kontrolünün DataSource ayarlarının yapılması.

Ardından “Edit Columns” seçeneği seçilir. “BookType” kolonu silinir.

DataGridView1 kontrolünün Columns ayarlarının yapılması.

DataGridView1 kontrolünün Columns ayarlarının yapılması.

BookTypeID” kolonu seçilir ve “ColumnType” özelliği “DataGridViewComboBoxColumn” seçilir.

DataGridView1 kontrolünün BookTypeID kolonu ayarlarının yapılması.

Ardından “DataSource” özelliği “bookTypeBindingSource” , “DisplayMember” özelliği “TypeDesc” , “ValueMember” özelliği “ID” ve “DataPropertyName” özelliği “BookTypeID” olarak ayarlarız..

DataGridView1 kontrolünün BookTypeID kolonu ayarlarının yapılması.

Uygulamamızın tasarım aşamasında son hali bu şekildedir.

Formun görünümü.

Şimdi “Load” olayında verilerimizi çekerek ilgili binding source nesnelerimizi dolduralım. Böylece veritabanına girdiğimiz örnek veriler listelenecektir.

Form2.cs
  1. public partial class Form2 : Form
  2. {
  3.     // Modelimizi bir lokal de?i?kende tutuyoruz.
  4.     private TestBaseEntities Entity = null;
  5.  
  6.     public Form2()
  7.     {
  8.         InitializeComponent();
  9.  
  10.         // Modelimizin bir nesnesini olu?truyoruz.
  11.         this.Entity = new TestBaseEntities();
  12.  
  13.         // Load olay?m?z? tan?ml?yoruz..
  14.         this.Load += new EventHandler(Form2_Load);
  15.     }
  16.  
  17.     private void Form2_Load(object sender, EventArgs e)
  18.     {
  19.         // S?ras?yla ilgili Binding Source'lar? Modelimiz ile dolduruyoruz.
  20.         this.bookTypeBindingSource.DataSource = this.Entity.BookTypes;
  21.         this.bookBindingSource.DataSource = this.Entity.Books;
  22.     }
  23.  
  24.     private void button1_Click(object sender, EventArgs e)
  25.     {
  26.         // Ekrana koydu?umuz bir butona t?kland???nda
  27.         // de?i?iklikleri kaydediyoruz.
  28.         this.Entity.SaveChanges();
  29.     }
  30. }

Bu işlemlerden sonra veritabanınızda örnek verileriniz varsa şöyle bir sonuç oluşacaktır.

Uygulamanın son hali.

Combobox kolon verisini değiştirilmesi.

Kaydet” butonuna tıklandığında tüm verilerimiz değil sadece güncellenen, yeni eklenen ve silinen veriler veritabanına aktarılarak işleme alınır. Bir satır seçilip “DELETE” tuşuna basıldığında satır silinebilir. Kaydetme işlemi yapıldığında veritabanına kaydedilecektir.

Bu konunun bir seri olmasını düşünüyorum. Bu makale ile bir giriş yapmış olduk.

Herkese iyi kodlamalar..

Oracle Data Provider for .NET (ODP.NET)

Oracle database’ine Entity Framework(EF) veya diğer ORM araçları kullanarak Visual Studio 2010 veya öncesi ile bağlanabilirsiniz.. Bunun için gerekli Data Provider’ı, aşağıdaki adresteki sayfadan indirerek kullanabilirsiniz..

Oracle Data Provider for .NET (ODP.NET)

ADO.NET Entity Framework – CRUD İşlemleri ve Alternatif Yollar

ADO.NET Entity Framework ile Select, Insert, Update, Delete işlemlerini nesneler üzerinden kolayca yapabiliyoruz. Bu konu hakkında bir sürü makale yazılmış.. Bu makaleleri okuyarak detaylarını öğrenebilirsiniz. Benim burada paylaşmak istediğim, CRUD işlemlerini yapan kod kalıplarıdır. Bir form üzerinde bu kodları test edebilirsiniz..

Form1.vb

Public Class Form1

 

    Private _Entity As MyEntity.Entities

    Public Property Entity() As MyEntity.Entities

        Get

            Return _Entity

        End Get

        Set(ByVal value As MyEntity.Entities)

            _Entity = value

        End Set

    End Property

 

    Private _MyRandom As New Random

    Public Property MyRandom() As Random

        Get

            Return _MyRandom

        End Get

        Set(ByVal value As Random)

            _MyRandom = value

        End Set

    End Property

 

 

    ”’

    ”’ Entity instance oluşturur.

    ”’

    ”’

    ”’

    Private Function GetEntityInstance() As MyEntity.Entities

        If (Me.Entity Is Nothing) Then _

            Me.Entity = New MyEntity.Entities

 

        Return Me.Entity

    End Function

 

 

    Private Sub GetList(ByVal startWith As Char)

        Dim entity As MyEntity.Entities = Me.GetEntityInstance()

        Dim str As String = startWith.ToString()

 

        Dim locations = From l In entity.Location _

                        Where l.Name.StartsWith(str) _

                        Select l

 

        Me.DataGridView1.DataSource = locations

    End Sub

 

    Private Sub GetList()

        Dim entity As MyEntity.Entities = Me.GetEntityInstance()

 

        Dim locations = From l In entity.Location _

                        Select l

 

        Me.DataGridView1.DataSource = locations

 

 

        ” // *********************************************//

        ” // ALTERNATİF                                   //

        ” // *********************************************//

 

        ‘Using entity As New MyEntity.Entities

 

        ‘    Dim locations = From l In entity.Location _

        ‘                    Select l

 

        ‘    Me.DataGridView1.DataSource = locations

 

        ‘End Using

 

    End Sub

 

    Private Sub InsertLocation()

 

        ” // *********************************************//

        ” // ALTERNATİF                                   //

        ” // *********************************************//

 

        ‘Using entity As New MyEntity.Entities

 

        ‘    Dim newObject As New MyEntity.Location

        ‘    newObject.ModifiedDate = DateTime.Now.Date

        ‘    newObject.Name = “F” & “_Yeni_” & Me.MyRandom.Next(0, 250).ToString()

        ‘    newObject.CostRate = 0

        ‘    newObject.Availability = 1

 

        ‘    entity.AddToLocation(newObject)

        ‘    entity.SaveChanges()

 

        ‘End Using

 

 

        ” // *********************************************//

        ” // ALTERNATİF                                   //

        ” // *********************************************//

 

        Dim entity As MyEntity.Entities = Me.GetEntityInstance()

 

        Dim newobject As New MyEntity.Location

        newobject.ModifiedDate = DateTime.Now.Date

        newobject.Name = “f” & “_yeni_” & Me.MyRandom.Next(0, 250).ToString()

        newobject.CostRate = 0

        newobject.Availability = 1

 

        entity.AddToLocation(newobject)

        entity.SaveChanges()

 

    End Sub

 

    Private Sub DeleteLocation(ByVal id As Integer)

 

        ” // *********************************************//

        ” // ALTERNATİF                                   //

        ” // *********************************************//

 

        ” Item Primary key kolonu değerine göre elde edilir.

       

        ‘Dim key As New EntityKey(“Entities.Location”, _

        ‘                         New KeyValuePair(Of String, Object)() _

        ‘                            { _

        ‘                                New KeyValuePair(Of String, Object)(“LocationID”, CType(id, Int16)) _

        ‘                            })

 

        ‘Dim location As MyEntity.Location = Me.Entity.GetObjectByKey(key)

 

        ‘If (location IsNot Nothing) Then

        ‘    Me.Entity.Location.Context.DeleteObject(location)

        ‘    Me.Entity.SaveChanges()

        ‘End If

 

 

 

        ” // *********************************************//

        ” // ALTERNATİF                                   //

        ” // *********************************************//

 

        ” Item Primary key kolonu değerine göre elde edilir.

       

        ‘Using entity As New MyEntity.Entities

 

        ‘    ‘ Aranan item özelliklerinin belirtildiği nesne..

        ‘    Dim obj As New MyEntity.Location

        ‘    obj.LocationID = id

 

        ‘    ” Entity içinde nesneye erişmek için key oluşturulur.

        ‘    Dim key As EntityKey = entity.CreateEntityKey(obj.GetType().Name, obj)

 

        ‘    ” Item entity içinde eşleşirse..

        ‘    If (entity.TryGetObjectByKey(key, obj)) Then

 

        ‘        ” Sistemden silinir.

        ‘        entity.DeleteObject(obj)

        ‘        entity.SaveChanges()

 

        ‘    End If

 

        ‘End Using

 

 

        ” // *********************************************//

        ” // ALTERNATİF                                   //

        ” // *********************************************//

 

        ” Silinecek nesne elde edilir.

        Dim deleteObj As MyEntity.Location = Me.Entity.Location.Where( _

            Function(loc) _

                loc.LocationID = id).FirstOrDefault()

 

        If (deleteObj IsNot Nothing) Then

 

            ” Kullanıcıdan silme onayı alınır..

            Dim diaResult As DialogResult = _

                MessageBox.Show(“Kayıt silinsin mi?”, “Silme İşlemi”, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)

 

            If (diaResult = Windows.Forms.DialogResult.Yes) Then

 

                ” Nesne silinir..

                Me.Entity.DeleteObject(deleteObj)

                Me.Entity.SaveChanges()

 

            End If

 

        End If

 

 

    End Sub

 

    Private Sub UpdateLocation(ByVal id As Integer)

 

        ” // *********************************************//

        ” // ALTERNATİF                                   //

        ” // *********************************************//

 

        ‘    Dim entity As MyEntity.Entities = Me.GetEntityInstance()

 

        ‘    ” Güncellenecek nesne elde edilir.

        ‘    Dim updObj As MyEntity.Location = entity.Location.Where _

        ‘            (Function(obj) obj.LocationID = id).FirstOrDefault()

 

        ‘    ” Özelliklerine yeni değerler set edilir.

        ‘    With updObj

 

        ‘        .Name = “Türkiye” & id.ToString

 

        ‘    End With

 

        ‘    entity.SaveChanges()

 

 

 

        ” // *********************************************//

        ” // ALTERNATİF                                   //

        ” // *********************************************//

 

        Using entity As New MyEntity.Entities

 

            ” Güncellenecek nesne elde edilir.

            Dim updObj As MyEntity.Location = entity.Location.Where _

                    (Function(obj) obj.LocationID = id).FirstOrDefault()

 

            ” Özelliklerine yeni değerler set edilir.

            With updObj

 

                .Name = “Türkiye” & id.ToString

 

            End With

 

            entity.SaveChanges()

 

        End Using

 

 

    End Sub

 

 

 

 

    Private Sub btnSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelect.Click

        Me.GetList(“F”)

    End Sub

 

    Private Sub btnSelectAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectAll.Click

        Me.GetList()

    End Sub

 

    Private Sub btnInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInsert.Click

        Me.InsertLocation()

        Me.GetList()

    End Sub

 

    Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click

 

        ” Seçili satır ID ‘leri silme işlemi için ilgili fonksiyona gönderilir.

        For Each row As DataGridViewRow In Me.DataGridView1.SelectedRows

 

            Dim locID As Integer = row.Cells(“LocationID”).Value

            Me.DeleteLocation(locID)

 

        Next

 

        ” Opsiyonel..

        ”Me.GetList()

 

    End Sub

 

    Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click

 

 

        ” Seçili satır ID ‘leri silme işlemi için ilgili fonksiyona gönderilir.

        For Each row As DataGridViewRow In Me.DataGridView1.SelectedRows

 

            Dim locID As Integer = row.Cells(“LocationID”).Value

            Me.UpdateLocation(locID)

 

        Next

 

        Me.GetList()

 

    End Sub

 

End Class