SQL Express de Profiler Kullanımı

Basit web, desktop uygulamalarında ve güncelik yazılım denemelerimde SQL Server’ın Express sürümünden yararlanıyorum. Tüm ihtiyaçlarımı karşıladığı gibi lightweight bir versiyon olmasından dolayı makinamı da fazla yormuyor. Kendini hissettirmiyor.

Tabii SQL express sürümünü kullanmanın dezavantajlı yanları da bulunmakta. Örneğin SQL Profiler gibi güzel araçları kullanamıyorsunuz, desteklemiyor. Ayrıca tabii ki de kısıtları da mevcut, esas SQL Server sürümündeki gibi tüm özellikleri ve yetenekleri içermiyor.

Bu yazıyı yazmamdaki ihtiyaç, veritabanı olarak SQL Express 2012 ve ADO.NET Entity Framework kullandığım bir bir projede Entity Framework üzerinden yürüttüğüm işlemlerde çalıştırılan SQL sorgularını(query) görebilmek, hatta projenin çalışması esnasında ne zaman veritabanına, hangi sorguların atıldığını görmek istememdi.

Bu işlemleri en güzel SQL Server Profiler aracı ile yapabiliyoruz(SQL Server profiler kullanımı için bakınız). İşte tam burada bir ihtiyaç doğuyor. SQL Express sürümü SQL Profiler’ı desteklemiyor. Aslında SQL Profiler, SQL express sürümünü desteklemiyor. Kısa bir Googling sonucunda 2 adet kullanılabilir araç buldum. Bunlardan biri bir firmaya ait ve paralı olan xSQL Profiler bir diğeri de codeplex üzerinde open source bir proje olan ExpressProfiler isimli ücretsiz araçtır. Belirtmem gerekiyor ki paralı olan xSQL Profiler, bir SQL server instance’ı için ücretsizdir. Yırttık dediğinizi duyar gibiyim. Gülümseme

kmb-udemy-reklam

Open source olan ExpressProfiler için ise bir sınırlama yok. Bilgisayarınıza kurabilir ve siz de SQL express sürümünde bu profiler araçları ile sorguları izleyebilirsiniz.

ExpressProfiler

ExpressProfiler

xsql_profiler

xSQL Profiler

Ben hızlı kurulumu ve birden fazla SQL instance desteğinden dolayı ExpressProfiler ‘ı tercih ettim.

Ayrıca belirtmem gereken bir noktada xSQL Profiler ‘ın çalışması için bir veritabanı oluşturması gerekmektedir. Bir diğer önemli husus da, xSql Profiler ‘ın SQL Server 2012 versiyonlarına desteği bulunmamaktadır. Sitelerinde 2008 ve öncesi için desteklendiği yazmaktadır. Sizlerde ikisini de deneyerek kararınızı verebilirsiniz.

Faydalı Bağlantılar

SQL Express 2012

İyi çalışmalar dileklerimle,

kmb-udemy-reklam

Visual Studio 2012’de Entity Framework CodeGenerationStrategy ve WCF Sorunu

Visual Studio 2012 ile çalışırken EntityFramework ve WCF ‘i bir arada kullanıyorsanız muhtemelen birkaç sorun ile karşılaşacaksınız. Ben bu sorun ile silverlight uygulaması geliştirirken bir şekilde tanışmış oldum. Öncelikle senaryomuzdan bahsetmek istiyorum.

Sorunun Tespiti;

Visual Studio 2012 ile bir silverlight uygulaması geliştirmek için gerekli projeyi oluşturdum. Projeyi .Net Framework 4.0 ve Silverlight 5 versiyonlarını kullanarak geliştirmek üzere ön ayarlamalarını yaptıktan sonra projemiz planlandığı gibi visual studio 2012 ile oluşturuluyor. Elimizde ilişkili tablolar bulunan bir SQL veritabanı mevcut. Ardından ASP.NET projemize ADO.NET Entity Data Model (EF) ekliyoruz. Modelimiz veritabanından ilişkilendirilmiş tablolarımızı okuyarak ilgili kod üretme işlemini gerçekleştiriyor. ASP.NET projemize silverlight uygulamamız ile veri alışverişinde bulunmak üzere bir WCF servisi ekliyoruz. İlişkili herhangi bir tablodan veri okuyan basit bir metot ekliyoruz. Ardından silverlight uygulamamıza WCF servisimizi Service Reference olarak ekliyoruz. Silverlight uygulamamızdan ilgili metodu çağırdığımız da servis cevabı alınamadığına dair bir hata ile karşılaşacağız. (Bu hata ilişkisiz bir tablodan veri okurken değil ilişkisi bulunan bir tablodan veri okurken meydana geliyor.)

Projenin Oluşturulması

Silverlight Projesinin Ayarlanması

ADO.NET Entity Data Model Eklenmesi

WCF Servisinin Eklenmesi

Silverlight Uygulamasına WCF Servis Eklenmesi ve Kodlama

Silverlight Uygulamasının Çalıştırılması

The remote server returned an error: NotFound.

Oluşan hata şekilden de görüldüğü gibidir. “The remote server returned an error: NotFound.

 

Sorunun Çözümü;

Yukarıda anlattığım  proje adımlarını Visual Studio 2010 ile gerçekleştirdiğinizde böyle bir sorun ile karşılaşmıyorsunuz. Projeniz sağlıklı bir şekilde çalışıyor.

  1. İlk düşündüğüm, Visual Studio 2012 ile gelen Entity Framework ‘ün versiyonunun yükselmiş olmasından kaynaklandığını düşündüm. Visual Studio 2012 üzerindeki projemdeki Entity Framework versiyonunu düşürmeye çalıştım. Bu sonucu etkilemedi.
  2. İkinci düşündüğüm, WCF servisi için yeni bir güncelleme  ya da versiyon yayınlanmış olabileceği ve benim bunu yüklemememden kaynaklı olabileceği idi. Araştırmalarım beni “WCF Data Services 5.2 RTM Tools for Visual Studio 2010/2012” ‘ye yönlendirdi. WCF servis ile ilgili bazı hataları gideren bu Tools’u yükledim. Sorunun çözümüne yaklaştığımı ve sonunda olduğunu düşünürken, tekrar aynı hata ile karşılaşmak çok can sıkıcıydı. Bu da sonucu etkilemedi.
  3. Üçüncü düşündüğüm, Entity Framework’ün ürettiği kod ‘dan şüphelenmem sonucunda oldu. Visual Studio 2012 üzerinde eklediğim ADO.NET Entity Data Model nesnesi ile projeye bir sürü yeni dosya eklendiğini fark ettim. Ayrıca üretilen koddaki miras alınan nesne de farklıydı. Neyden farklıydı diye sorduğunuzu tahmin ediyorum, Visual Studio 2010’da eklediğim ADO.NET Entity Data Model nesnesinden farklı birçok dosya ve kod söz konusuydu. Düşündüm ki eğer Visual Studio 2010 ‘daki kod sorunsuz çalışıyor ise, visual studio 2012 ‘de üretilen kod’a karşı WCF servisi gerekli tepkiyi gösteremiyor. Benim yapmam gereken Visual Studio 2012’de Visual Studio 2010’daki gibi ADO.NET Entity Data Model nesnesinin kod üretmesini sağlamak olmalı !! Bu sefer araştırmamı bunun üzerinde gerçekleştirdim. Ulaştığım bir yazıya buradan ulaşabilirsiniz. Ardından çözüme daha da çok yaklaştıran yazıya da buradan ulaşabilirsiniz. Tabii ki yapılacakları kısaca burada açıklayacağım.

Öncelikle sorun;

ADO.NET Entity Data Model nesnesinin kod üretme şeklinde(bu kesinleşti)

  • Visual Studio 2012 ‘de ADO.NET EF Modelinizi çift tıklayarak designer’ı açın.
  • Designer’da boş bir yere tıklama yaptığınızda “Properties” pencerenizde ilgili özellikler gelecektir.

image

  • Properties penceresindeki “Code Generation Strategy” özelliğinin değerini “Default” olarak değiştirin.

image

  • Ardından Solution Explorer’da Model’inize ait “*.tt” uzantılı dosyaları silin.

image

  • Modelinizin bulunduğu projenizi “Rebuild” ile yeniden derleyin.

image

  • Projenizi F5 ile çalıştırdığınızda WCF servisinizin sorun vermeden çalıştığını göreceksiniz.

 

Çözüm basit görünüyor. Sorunun tespitinde baya bir uğraştığımı ve farklı senaryolar düşündüğümden farklı noktalara gittiğimi farketmişsinizdir. Burada kolayca okuduğunuz bu sorun beni 3-4 gündür oyalıyordu. Açıkçası işimi Visual Studio 2010 üzerinden götürdüm fakat sorunu çözmem beni çok sevindirdi. Sizin içinde aynı şekilde hissettireceğiniz düşünüyorum.

 

#amenities

RadTreeView Üzerinde Organizasyon Hiyerarşisi Oluşturma – Create Organization Hierarchy in RadTreeView

Herhangi bir amaç için bir organizasyon hiyerarşisi oluşturmak için kolları sıvıyoruz. Ne için bunu kullanabiliriz? Benim kullandığım amaç için olabilir; çalıştığınız kurumdaki çalışanlarınızın departman olarak hiyerarşisini göstermek, bir aile hiyerarşisini göstermek, ürün ya da hizmet hiyerarşisini göstermek olabilir. TreeView kontrolü üzerinde bu işlemi kolaylıkla yapabiliyoruz. Fakat bizim buradaki amacımız bu işlemi yaparken bir “OrganizationHierarchy” isimli ara sınıf üzerinden hiyerarşinin otomatik oluşturulmasını istiyoruz. Yani TreeView üzerinde “node” ‘lar ile uğraşmak istemiyoruz. Oluşturacağımız bu sınıf’a yapımızı çok daha anlaşılır ve kullanışlı olarak tanımlayacağız ve node oluşturma, node’a resim koyma işlemlerini bu sınıfın ilgili metoduna bırakacağız. Önce hedeflediğimiz yapıyı kısaca göstermek istiyorum.

Yazmak istediğimiz kod yapısı.
  1. // Departman tanimi..
  2. OrganizationHierarchyItem departman =
  3.     new OrganizationHierarchyItem(getPhotoFromDatabase: false, pName: "Yazilim Departmani");
  4.  
  5. // Calisanlarin tanimi..
  6. OrganizationHierarchyItem murat = new OrganizationHierarchyItem(photoWidth: 48, photoHeight: 64, pKullaniciID: 23916, getPhotoFromDatabase: true, pName: "Proje Muduru");
  7. OrganizationHierarchyItem murat1 = new OrganizationHierarchyItem(photoWidth: 48, photoHeight: 64, pKullaniciID: 23916, getPhotoFromDatabase: true, pName: "Yazilim Uzmani");
  8. OrganizationHierarchyItem murat2 = new OrganizationHierarchyItem(photoWidth: 48, photoHeight: 64, pKullaniciID: 23916, getPhotoFromDatabase: true, pName: "Yazilim Uzmani Yardimcisi");
  9. OrganizationHierarchyItem murat3 = new OrganizationHierarchyItem(photoWidth: 48, photoHeight: 64, pKullaniciID: 23916, getPhotoFromDatabase: true, pName: "Yazilim Uzmani");
  10.  
  11. departman.SubItems.Add(murat);
  12. murat.SubItems.Add(murat1);
  13. murat1.SubItems.Add(murat2);
  14. murat.SubItems.Add(murat3);
  15.  
  16. OrganizationHierarchy hierarchy = new OrganizationHierarchy();
  17. hierarchy.RootImage = Resources.commercial_building_icon48;     // Departman resmi.
  18. hierarchy.TreeViewControl = this.radTreeView1;                  // Hiyerarsinin olusturulacagi kontrol.
  19. hierarchy.Add(departman);
  20.  
  21. hierarchy.LoadHierarchy(hierarchy);

Yukarıdaki kod ‘da gördüğünüz üzere  “OrganizationHierarchy” ve “OrganizationHierarchyItem” isimli iki sınıf üzerinden bir hiyerarşi kurmak istiyoruz. Yapımız gayet basit. Bir “OrganizationHierarchyItem” ‘ın “KullanıcıID”, “PhotoWidth”, “PhotoHeight”, “GetPhotoFromDatabase” ve “Name” isimli özellikleri vardır. Ayrıca her “OrganizationHierarchyItem” kendi tipinden olan “SubItems” içerebilir. Yukarıda yazmak istediğimiz kod ise gayet basit. Bir yazılım departmanı, proje müdürü, iki tane yazılım uzmanı ve bir yazılım uzmanı yardımcısı tanımladım.. Alt kısmında ise hiyerarşiyi oluşturdum. Her oluşturduğum çalışanı, ait olduğu çalışanın altına ekliyorum. Departmanın altınada en baştaki çalışanı ekliyorum. Burada kurduğumuz yapıda çalışanlara ait resimlerin boyutlarının ne olacağı, resimlerin nereden çekileceği belirtiyorum. Bizim yapımızda resimler veritabanında bulunmaktadır. “KullanıcıID” ile bu resimleri veritabanından çekeceğim.

  1. murat – Proje Muduru
  2.     murat1 – Yazilim Uzmani
  3.         murat2 – Yazilim Uzman Yardimcisi
  4.     murat3 – Yazilim Uzmani

Şimdide “OrganizationHierarchy” ve “OrganizationHierarchyItem” yapılarını oluşturalım. TreeView’ı dolduracak olan yapı; “OrganizationHierarchy” ‘dir. Bu sebeple yazdığımız kod’da bu yapının hangi TreeView kontrolüne ilgili nesneleri dolduracağını da yukarıdaki kod üzerinde belirtiyoruz. Hatta departman için kullanacağı resmide kendisine veriyoruz. Sonrada ilgili departman nesnemizi ya da nesnelerimizi bu yapıya ekliyoruz.

Veritabanında ilgili tablomu ADO.NET Entity Framework kullanarak projeme ekliyorum.

image

OrganizationHierarchyItem.cs
  1. public class OrganizationHierarchyItem
  2. {
  3.  
  4.     private Image DEFAULT_PHOTO = TreeView.Properties.Resources.User_64x64;
  5.  
  6.     public int KullaniciID { get; set; }
  7.     public Image Photo { get; set; }
  8.     public Size PhotoSize { get; set; }
  9.     public string Name { get; set; }
  10.     public object Tag { get; set; }
  11.     public List<OrganizationHierarchyItem> SubItems { get; set; }
  12.  
  13.  
  14.     protected void SetDefaultValues()
  15.     {
  16.         this.Photo = this.DEFAULT_PHOTO;
  17.         this.PhotoSize = new Size(64, 64);
  18.         this.SubItems = new List<OrganizationHierarchyItem>();
  19.     }
  20.     protected Image GetKullaniciPhoto()
  21.     {
  22.         try
  23.         {
  24.             using (MyEntities entity = new MyEntities())
  25.             {
  26.                 tbl_kullaniciphoto kullanici =
  27.                     (from x in entity.tbl_kullaniciphoto
  28.                         where x.fld_kullaniciID == this.KullaniciID
  29.                         select x).FirstOrDefault();
  30.  
  31.                 if (kullanici != null)
  32.                 {
  33.                     MemoryStream memo = new MemoryStream(kullanici.fld_picture);
  34.                     return Image.FromStream(memo);
  35.                 }
  36.             }
  37.         }
  38.         catch (Exception)
  39.         {
  40.             return TreeView.Properties.Resources.User_64x64;
  41.         }
  42.  
  43.         return this.DEFAULT_PHOTO;
  44.     }
  45.     protected Image GetKullaniciPhoto(byte[] buffer)
  46.     {
  47.         if (buffer != null && buffer.Length > 0)
  48.         {
  49.             MemoryStream memo = new MemoryStream(buffer);
  50.             return Image.FromStream(memo);
  51.         }
  52.         else
  53.         {
  54.             return this.DEFAULT_PHOTO;
  55.         }
  56.     }
  57.  
  58.  
  59.     public OrganizationHierarchyItem()
  60.     {
  61.         this.SetDefaultValues();
  62.     }
  63.     public OrganizationHierarchyItem(Size pPhotoSize, int pKullaniciID = -1, Image pPhoto = null, string pName = "")
  64.     {
  65.         this.SetDefaultValues();
  66.  
  67.         this.KullaniciID = pKullaniciID;
  68.         this.Photo = pPhoto;
  69.         this.PhotoSize = pPhotoSize;
  70.         this.Name = pName;
  71.     }
  72.     public OrganizationHierarchyItem(Size pPhotoSize, int pKullaniciID = -1, byte[] photoBuffer = null, string pName = "")
  73.     {
  74.         this.SetDefaultValues();
  75.  
  76.         this.Name = pName;
  77.         this.PhotoSize = pPhotoSize;
  78.         this.KullaniciID = pKullaniciID;
  79.         this.Photo = this.GetKullaniciPhoto(photoBuffer);
  80.     }
  81.     public OrganizationHierarchyItem(Size pPhotoSize, int pKullaniciID = -1, bool getPhotoFromDatabase = true, string pName = "")
  82.     {
  83.         this.SetDefaultValues();
  84.  
  85.         this.KullaniciID = pKullaniciID;
  86.         this.Name = pName;
  87.         this.PhotoSize = pPhotoSize;
  88.  
  89.         if (getPhotoFromDatabase)
  90.             this.Photo = this.GetKullaniciPhoto();
  91.     }
  92.     public OrganizationHierarchyItem(int photoWidth = 64, int pKullaniciID = -1, int photoHeight = 64, bool getPhotoFromDatabase = true, string pName = "")
  93.     {
  94.         this.SetDefaultValues();
  95.  
  96.         this.KullaniciID = pKullaniciID;
  97.         this.Name = pName;
  98.         this.PhotoSize = new Size(photoWidth, photoHeight);
  99.  
  100.         if (getPhotoFromDatabase)
  101.             this.Photo = this.GetKullaniciPhoto();
  102.     }
  103.     public OrganizationHierarchyItem(int pKullaniciID = -1, int photoWidth = 64, int photoHeight = 64, Image pPhoto = null, string pName = "")
  104.     {
  105.         this.SetDefaultValues();
  106.  
  107.         this.KullaniciID = pKullaniciID;
  108.         this.Photo = pPhoto;
  109.         this.PhotoSize = new Size(photoWidth, photoHeight);
  110.         this.Name = pName;
  111.     }
  112.     public OrganizationHierarchyItem(int pKullaniciID = -1, int photoWidth = 64, int photoHeight = 64, byte[] photoBuffer = null, string pName = "")
  113.     {
  114.         this.SetDefaultValues();
  115.  
  116.         this.Name = pName;
  117.         this.PhotoSize = new Size(photoWidth, photoHeight);
  118.         this.KullaniciID = pKullaniciID;
  119.         this.Photo = this.GetKullaniciPhoto(photoBuffer);
  120.     }
  121.  
  122. }

Yukarıdaki sınıf içindeki kodda gördüğünüz gibi bir sürü constructors oluşturdum. Böylece kullanıcı elindeki verileri esnek bir biçimde kullanarak nesne oluşturabilir.

OrganizationHierarchy.cs
  1. public class OrganizationHierarchy : List<OrganizationHierarchyItem>
  2. {
  3.  
  4.     public Image RootImage { get; set; }
  5.     public RadTreeView TreeViewControl { get; set; }
  6.  
  7.  
  8.     public OrganizationHierarchy()
  9.     {
  10.  
  11.     }
  12.     public OrganizationHierarchy(Image rootImage)
  13.     {
  14.  
  15.     }
  16.  
  17.  
  18.     public void LoadHierarchy(OrganizationHierarchyItem item, RadTreeNode node)
  19.     {
  20.         RadTreeNode childNode = new RadTreeNode(item.Name);
  21.         childNode.Image = item.Photo.GetThumbnailImage(item.PhotoSize.Width, item.PhotoSize.Height, new Image.GetThumbnailImageAbort(() => false), System.IntPtr.Zero); ;
  22.         childNode.Tag = item;
  23.  
  24.         if (item.SubItems != null && item.SubItems.Count > 0)
  25.         {
  26.             foreach (OrganizationHierarchyItem childItem in item.SubItems)
  27.             {
  28.                 this.LoadHierarchy(childItem, childNode);
  29.             }
  30.         }
  31.  
  32.         if (node == null)
  33.         {
  34.             if (this.TreeViewControl == null)
  35.                 throw new ObjectNotFoundException("Hiyerar?inin olu?turulmas? i?in gerekli RadTreeView kontrol? bulunamad?.");
  36.  
  37.             this.TreeViewControl.Nodes.Add(childNode);
  38.         }
  39.         else
  40.             node.Nodes.Add(childNode);
  41.     }
  42.     public void LoadHierarchy(OrganizationHierarchy hierarchy)
  43.     {
  44.         foreach (OrganizationHierarchyItem item in hierarchy)
  45.             this.LoadHierarchy(item, null);
  46.  
  47.         if (this.TreeViewControl == null)
  48.             throw new ObjectNotFoundException("Hiyerar?inin olu?turulmas? i?in gerekli RadTreeView kontrol? bulunamad?.");
  49.  
  50.         if (hierarchy.RootImage != null)
  51.             foreach (RadTreeNode rootNode in this.TreeViewControl.Nodes)
  52.                 rootNode.Image = hierarchy.RootImage;
  53.  
  54.         this.TreeViewControl.Tag = hierarchy;
  55.     }
  56.  
  57. }

OrganizationHierarchy” sınıfının miras aldığı yapıya dikkat edin. “List<OrganizationHierarchyItem>” böylece, yapı list gibi davranacaktır. Bu sınıfın örneğini(instance) oluşturduktan sonra ekleyeceğiniz her bir OrganizationHierarchyItem için belirttiğiniz “TreeViewControl” özelliğindeki treeview’a hiyerarşiyi oluşturacaktır.

image

Burada bazılarınız şunu diyebilir. Bu kadar yapı kurmaya ne gerek vardı. TreeView’a node’ları girerdik olur ve biterdi. Fakat bizim amacımız bu değil. Yani yazılımı olması gerektiği gibi yapmak var. Bir de yapmış olmak için yapmak var. Bizim ihtiyacımız olan bir Organization Hierarchy yapısını uygulamamız tarafında barındıracak yapıyı tasarlamak. Ardından bu yapıyı sadece TreeView için değil her yerde farklı amaçlar içinde kullanabilmek. Böylece istediğimiz yere bu yapıyı taşıyabiliriz. Farklı amaçlarla kullanabiliriz.

Projelerimde kurduğum gerçekten hoş yapıları paylaşmaya devam edeceğim. Şimdilik bu kadar. Gülümseme

Herkese iyi çalışmalar..

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