![]() | |
Visual LINQ Query Builder | 03.07.2008 15:08:00 |
| Kategori : Visual C# .NET Özet : 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. | |
| 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,
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
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... | |
Yazgelistir.com | |