Makale Özeti

Visual LINQ Query  Builder kullanarak VS.NET 2008 içine yapacağımız bir eklenti ile LINQ'dan SQL'e geliştireceğimiz sorguları görselleştirebiliriz.Tıpkı veritabanının ABC'sini öğrenirken kullandığımız Access Query Builder'daki gibi bir deneyimden bahsediyorum desem sanırım çoğumuzun zihninde açık bir şekilde canlanacaktır. LINQ üzerinde gerçekleşmesi, hem de UI'in tamamen WPF kullanıyor olması LINQ syntax'ine aşina olmak ve yeni eklentiler geliştirmek isteyen arkadaşlara yol göstereceğine ve zihin açaçağına hiç şüphem yok.

Makale

Visual LINQ Query Builder
   Visual LINQ Query  Builder kullanarak VS.NET 2008 içine yapacağımız bir eklenti ile LINQ'dan SQL'e geliştireceğimiz sorguları görselleştirebiliriz. Tıpkı veritabanının ABC'sini öğrenirken kullandığımız Access Query Builder'daki gibi bir deneyimden bahsediyorum desem sanırım çoğumuzun zihninde açık bir şekilde canlanacaktır. LINQ üzerinde gerçekleşmesi, hem de UI'in tamamen WPF kullanıyor olması  LINQ syntax'ine aşina olmak ve yeni eklentiler geliştirmek isteyen arkadaşlara yol göstereceğine ve zihin açaçağına hiç şüphem yok. LINQ'nun ne olduğundan çok Reverse Engineering yapıp arkasında yatan felsefeye değinmek sanırım daha şık olacaktır.
   Yazdığınız uygulama ne olursa olsun günümüz programlama dünyasında yazılan uygulamarın çoğunda bir veri kaynağına olan ihtiyacın bir zorunluluk haline gelmesi, ister istemez programlama dillerini de uygulama ve ilişkisel veritabanı yönetim sistemi arasındaki verinin çift yönlü olan yolculuğunda aynı özellikleri kullanarak  konuşturacak açılımar bulmaya yöneltmiştir. Default olarak hangi uygulama tipi geliştirirsek geliştirelim uygulama içinden İlişkisel veri tabanı yönetim sistemine olan yolculukta,

  • Bir connection sağlayarak uygun bir connection string oluşturarak ilgili veritabanı yönetim sisteminin giriş için kapısını çalmak
  • Temel CRUD(Create,Read,Update,Delete) işlemleri için gerek sql tarafında gerekse CLR destekli yapıları kullanarak amaca yönelik adhoc sorgular veya stored procedureler yazmak
  • Kullanacağımız ADO(Connect,Disconect) mimarisinbe uygun olarak ilgili bağlantı üzerinden bilgileri  uygun Nesnelerle almak(Data reader,Dataset)
  • Aldığımız bilgileri uygulama yapısına uygun olusturduğumuz kontrollere bağlamak.

   Bu yolculuğa tekrar tekrar çıkmak kimbilir belki üzerinde düzenleme yapılmayacak ve yeni versiyona ihtiyaç duymayan birt uygulama için belki problem olmayabilir. ANcak büyük ölçekli bir uygulamadan bahsettiğimizde sanırım daha da ileriye giderek OOP temelli çözümlere başvurmak ki bunlar arasında piyasada mantar gibi türemiş olan bir ORM çözümü kullanmak ve ya tekrarlanan bu işlemleri Codesmith gibi tekrarlayan yapıları kalıplar haline getirerek uygun yerlerde kullnarak çözüme gitmek sanırın daha iyi bir çözüm olacaktır.

 Veritabanı Yönetim Sistemleri ve uygulama geliştirme platformları arasındaki ortamlar karşılatırıldığında bunların aslında aynı dili konuşabileceklerini düşünmek sanki imkansız gibi görünebilir. Bir tarafta nırmalizayon kuralları çercevesi içinde oluşturulmuş tablolar ve bunlar arasında oluşturulmuş ilişkiler diğer tarafta ise class property gibi nesneler var. Bu iki ortam arasında oyle bir tercüman bulmalı ki tabloalrdaki bilgiler  tablo yapısı içinde söyleyebildikleri, anlamını kaybetmeden uygulama içierisinde tasarlanan nesnelere aktarılmalıdır. Bu işlemler için önceden geliştirilen  ve adeta bir sektör haline gelmiş her geçen gün pasta dilimindeki yerini büyütmekte olan  ORM yazlımları  mevcut iken. LINQ 'nun tam bu noktada iki yapıyı aynı dilde konuşturmak amacıyla bu özellikleri direk C# dilinin içine ekleyen bir çözüm olarak gelmesi gayet şık ve yerinde bir eklentidir diyebiliriz Şimdi de buraya kadar anlattıklarımıza bir de uygulama gözüyle bakalım. Öncelikle  Visual LINQ Query Builder' ı nereden elde edeceğimizle başlayalım. http://code.msdn.microsoft.com/vlinq/Release/ProjectReleases.aspx?ReleaseId=810  adresinden en son versiyonunu indirebiliriz. Daha sonra Database Model olusturabilmek için  AdventureWorksLınqOrmDataService ismince bir  class Library projesi  oluşturalım

 

  AdventureWorks veritabanını kulanacağımız için  AdventureWorks.dbml uzantılı  "LINQ to SQL class " item i class Library'e ekleyelim

 

 Bu class koluşturacağımız  AdventureWorks nesne veritabanı  modeli için bir container olarak  görev yapacaktır.

 

         Yukarıda görüldüğü gibi Container iki panelden oluşmaktadır. Sol tarafta nesne modeli içerisine Drag/drop yoluyla Server Explorer'dan ekleyeceğimiz Tabloların nesneleri  sağ  tarafta ise  bu tablolardan bilgi getirmek için  veritabanı tarafında olusturduğumuz stored procedurler bir metot olarak  Drag/drop  yoluyla nesne modeli içerisinde yerlerinin  alacaklardır. Bu size yabancı gelmese gerek özellikle ORM ile uğraşan ve yine yukarıdaki container  benzeri bir user ınterface kullanarak database schemasına erişen ve tabloları kullanılmak üzere birer class haline getiren code generator uygulamaları hatırlattıklarınba hiç süphem yok. Bir adım sonrasında AdventureWorks.dbml' item ı sağ tıklayarak çalışacağımız database modelin connection string bilgilerini property'lerinden ayarlayacağımız ekrana geçebiliriz.

 

     Artık sol taraftaki panele database nesne modeli içinde çalışacağımız tabloları nesnelerini oluşturmak üzere Sürükleyip ekleyebiliriz. Aynı şekilde sağ tarftaki panele de bu neseneler için bilgi getirmek üzere yazılan stored procedurleri sürükleyip ekleyebiliriz.

 

 AdventureWorks veritabanı nesne modelini oluşturduktan sonra bunu kullanabilmek için bir web projesi ekleyekim ve web projesine hazırladığımız nesne modeli  referans edelim

   

    Görüldüğü gibi database nesne modeli hazır ve rahatlıkla web içerisinde kullanılabilir bir halde. Bizim asıl amacımız oluşturduğumuz databse nesne modeli içerisinde görsel sorgular oluşturmaktı. Bunun için  yukarıdaki adresten indirdiğimiz Visual LINQ Query Builder  item şablonuna VLİNQ isimli yeni bir eleman ekleyecektir.

 

   Class Library içine bir tane VLİNQ queries ekleyelim.

 

         Ekleme işlemini gerçekleştirdikten sonra oluşan Queries1.vlinq dosyasını çift tıkladığımızda görsel bir ekranla karşılanırız .Bu ekranda ilk yapmamız gereken Property Window'u açarak üzerinde görsel sorgular oluşturmak üzere yukarıda    oluşturduğumuz database nesne modelin Connection string bilgisini eklemek olacaktır.

 

     Daha sonra görsel yeni bir LINQ sorgusunu databse nesne modeli üzerinde oluşturabilmek  için Queries1.vlinq penceresindeki  Create New Query sekmesini seçeriz.

   

 

      Seçince standart bildiğimiz From Where Select yapısını  expandable olarak karşımızda görürüz ve biz uğraşmak istediğimiz kısmı açıp işlemlerimizi bu alanda gerçekleştirebiliriz.

  

 

              Örneğin Employees tablosundan ContactID >110 için gibi basit bir sorgu oluşturmak için önce Class View daki Employee Class'ını drag drop yoluyla from kısmına Entity Source olarak  bırakırız. Where kısmını açarak  toplu iğneüzerine sağ tıklayarak Add Comparison seçildikten sonra uygun karşılaştırma ifadesini yazdıkatn sonra sıra Select kısmını açıp ilgili entity Source özelliğini seçmek kalır ve Sonucta görsel olarak karşımıza çıkan yapı aşağıdaki gibi olacaktır.

 

          Görsel olarak oluşturduğumuz sorgu class Library içerisinde Queries1.Designer.cs olarak kodsal oluşturulacaktır.

 

 

Bundan sonrası oluşturulan sorgunun gerçekten çalışıp çalışmadığını denemek ve web uygulamsı içinde kodsal kodla bu sorgunun sonucunu elde etmektir. Yine VLİNQ projesi içinde sorgunun sonucunu görsel olarak test e çalıştrıp görebilecek UI'lere sahibiz.Öncelike yazdığımız görsel sorguyu normal bi rporjeyi derliyormuş gibi derleyerek hataları ayıklayabiliriz. Daha Sonra Preview sekmesini seçerek oluşturduğumuz sorgu sonucunda sonucunu ResultSet

 

       Son olarakta oluşturduğumuz sorgunun kodsal olarak nasıl erişilebileceğine değinerek uygulamaya son verebilriz. Queries.Designer.cs  class'ını çift tıkladığımızda

 

 

   Son olarak oluşturduğumuz web application içerisinde yukarıdaki sorgu sonucunu uygun bir data control üzerinde göstermek kalıyor.

 

 

                                    Bundan sonrası tamamen yazacağımız sorgulara kalıyor sanırım. Kalın Sağlıcakla...