Entity Framework etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Entity Framework etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
22 Şubat 2013 Cuma
LINQ Nedir ? (Giriş)
Merhaba arkadaşlar , daha önceki makalelerimde sizlere Entity Framework ve ORM hakkında giriş bazlı bilgi vermiştim. Bu makalemde sizlere entity framework kullanarak var olan database üzerinden nasıl sorgulama yapacağımızı anlatmaya çalışacağım.Peki nasıl sorgulama yapacağım ? Veri tabanı üzerinde sorgulama yapabilmem için benim programım ile veri tabanı arasında bir bağ oluşturmam gerekir.Bu bağı da ya ADO.NET mimarilerinden biri ile ya da herhangi bir ORM tool u ile sağlayabilirim veya third party component ile sağlayabilirim.Bu makalemde ise ORM kullanarak var olan bir veri tabanı üzerinde sorgulama işlemi yapacağız.
Eğer ADO.NET mimarilerinden biri ile bağlantı sağlayacak olsaydık , mutlaka o veri tabanı üzerinde sorgulama işlemi yapmak için SQL kullanmak zorunda kalacaktık.
Peki ORM yani Microsoft tarafındaki ORM tool olan Entity Framework ile sorgulama işlemini nasıl yapacağız ?
- Elimizde bu işlem için uygun çok güzel bir teknoloji var :)
Tekrar SQL mi kullacağız ?
- Tabi ki Hayır.
Peki nedir bu teknoloji ?
- LINQ.
Bana sağlayacağı sadece Sql yazma derdinden mi kurtarmak ?
- Tabi ki de hayır. Şimdi entity framework kullanırsanız eğer , veri tabanı modelinizi projenize import ettikten sonra model üzerinde bulunan her bir tablo bize object olarak sunuluyor.Ben oop ile harmanlayarak sorgulama yapmak istediğim tablolar arasından ilgili alanlar için bir class içerisine property tanımlayarak , istediğim şekilde verileri çeker alırım.Böylelikle hem veri tabanımın güvenliği artmış olur hem benim kod yazmam hızlanır , hem projem daha düzgün gözükür , gereksiz bir çok tür dönüşümü ile uğraşmam , gereksiz veriler arasında dolanıp durmam ... Daha bir çok faydası mevcuttur.
Peki tüm bu sunulanlar çok güzel. Fakat ya hız ?
- Ado.Net daha verimli çalışmakta.
LINQ ' i sadece veri tabanı sorgulama işlemlerinde mi kullanabilirim ?
- Hayır. Object List ' lerin hepsinde kullanabilirsiniz.
Umarım giriş bölümünden kafanızda LINQ ' i oluşturabilmişimdir.Niçin kullanılır ? Faydaları nelerdir ? SQL yerine neden LINQ kullanırım ? Nerelerde kullanırım ? gibi soruların cevabını verdikten sonra isterseniz LINQ ' in syntax ini inceleyelim.
Aslında Linq syntax i eğer sql komutları yazdıysanız daha önceden size hiç de yabancı gelmeyecektir.Çünkü linq yazımında kullanılan keyword ler sql keyword leri ile neredeyse aynı.Basit bir örnek üzerinde syntax i görelim.
Mesela veri tabanımızdan çalışanlar ile ilgili tüm verileri tek bir tablo üzerinden çekecek olursak ,
var TumCalisanlar = from calisanlar in calisanListesi
select calisanlar;
Evet arkadaşlar ben bu sorgulama işlemini eğer sql kullanarak yapacak olsaydım eğer ,
select * from calisanListesi şeklinde bir sql komutu yazmam gerekecekti. Farkettiyseniz "from" ve "select" keyword leri aynı şekilde kullanılmıştır.Tek fark "in" keyword u.Lınq syntax i ile aslında biz şu şekilde emir veriyoruz ; "calisanListesi içerisindeki tüm verileri calisanlar diye bir değişkene aktar ve bu değişkenin içerisindeki tüm herşeyi seç ve TumCalisanlar değişkenine bu seçitiklerini ata." diyoruz. Böylelikle bana son derece esnek bir yapı sağlanmış oluyor.Ben linq kullanarak C# yapısında bulunan türleri , kendi oluşturduğum class ları , objeleri aslında Sql komutları ile birleştiriyorum.Böylelikle bir tarafta sql yazayım sonucunu alayım sonra C# üzerinde işlemler yapayım dönüşümleri sağlayım falan filan gibi gereksiz bir çok işlemden kurtulmuş oluyorum.
Peki bir tablodan veri çekerken ben bir filtreleme işlemi gerçekleştirmek istiyorum.Nasıl yaparım ?
- Bu sorunun cevabını hem sql ile hem de linq ile vereceğim . Sql kullanırsak eğer ;
select * from calisanListesi where yas>30 (gibi bir filtreleme işlemi olsun)
Bu işlemin linq tarafı ise şu şekilde ;
var TumCalisanlar = from calisanlar in calisanListesi where calisanlar.Yas>30
select calisanlar;
Görüldüğü gibi her iki sorgulama işleminde de filtreleme işlemi için "where" keyword u kullanılıyor.
Peki bir tablodan sadece bir kolondaki tüm verileri nasıl çekerim ?
- Sql kullanarak : select adi from calisanListesi
- Linq kullanarak : from calisanlar in calisanListesi select calisanlar.adi;
Peki bir tablodan birden çok kolondaki bilgileri nasıl çekerim ?
- Sql tarafında select ifadesinden sonra istediğiniz kolon isimlerini virgül ile yan yana yazarak alabilirsiniz.
- Linq tarafında ise from calisanlar in calisanListesi select new { calisanlar.adi , calisanlar.yasi};
olarak istediğiniz kolonları alabilirsiniz.Bu sayede bu sorgudan çıkan sonuç yeni bir tür olarak tutulur.Bu veri kümesini istediğiniz gibi kullanabilirsiniz.
Peki birden çok tabloyu birleştirerek sorgulama işlemi nasıl yaparım ?
-Sql tarafında : select * from calisanListesi join Yetkiler on calisanListesi.ID = Yetkiler.CalisanListesiID
-Linq tarafında ise from calisanlar in calisanListesi join yetkiListesi in Yetkiler on calisanlar.ID equals yetkiListesi .CalisanListesiID
Evet arkadaşlar basit anlamda Linq sorgulama işlemini anlatmaya çalıştım.Mümkün olduğu kadar sql ile kıyaslamalı örnekler vermemin nedeni zaten sql yazıyorsunuz , linq i görüp kaçmamanızı sağlamaktı :) Umarım faydalı olmuştur . Linq üzerinde bu makalede sadece sorgulama işlemi yaptık. Insert Update ve Delete işlemlerini başka bir makalemde anlatacağım.Linq i lambda expressions la kullanırsanız çok daha fayalı olacaktır.Lambda expressions ı da fırsat bulursam anlatacağım .
Şimdilik bu kadar görüşmek dileğiyle ...
16 Mayıs 2012 Çarşamba
Entity Framework Giriş ORM Nedir ?
Merhaba arkadaşlar.Bu makaleyi şuan okuduğunuza göre daha önce ado.net ile uygulama geliştirmiş veya en kötü ihtimalle ado.net in ne olduğunu nasıl çalıştığını bir veri tabanına nasıl bağlantı yapıldığını ve uygulama içerisinden nasıl veri tabanı işlemleri yapıldığını biliyor olduğunuzu düşünüyorum arkadaşlar.Şimdi şu ana kadar ki uygulamalarımızda veri tabanı işlemlerini nasıl yapıyorduk ? Öncelikle veri tabanımızı oluşturup daha sonra uygulama tarafına geçip ilgili yerlere veri tabanı işlemleri yapan kodlarımızı yapıyorduk değil mi ? Yani şekil olarak resmetmek gerekirse ;
Yukarıdaki şekle bakıldığında hangi platformda olursa olsun uygulamamız direk olarak bir veri tabanına bağlı durumda.Bu durumda uygulama üzerinden veri tabanını etkileyecek herhangi bir işlem yapmak istediğimizde sql ifadeleri kullanmak durumundayız.Peki bu sistemin nasıl dezavantajları var da bugün sizlere anlatacağım ORM araçları ortaya çıkmıştır ?
Yukarıdaki şekle bakıldığında uygulama orm e bağlı olduğunu görebiliriz.Database le direk olarak herhangi bir bağlantısı söz konusu değildir.Peki burada bizim yapmak istediğimiz databse işlemlerimiz nasıl oluyor da sql ifadesi yazmadan gerçekleşiyor? . Uygulama tarafında oluşan nesneler üzerinden biz database işlemi yaptığımızda orm tarafından bu işlem sql ifadesine dönüştürülüyor.Bu işleme Code Generating işlemi denir.Tüm orm araçları aynı işlemi yaparlar.Mesela siz uygulamanızda bir nesne üzerinden bir tabloya kayıt ekleme işlemi yapmak istediğinizde orm otomatik olarak insert sql ifadesini oluşturup database e gönderir.Bu sayede sizin sql bilmenize gerek kalmamaktadır.
Orm in ne olduğunu ve nasıl çalıştığını anladıktan sonra maddeler halinde avantajlarına ve dezavantajlarına bakalım arkadaşlar.
Avantajları ;
Yukarıdaki şekle bakıldığında hangi platformda olursa olsun uygulamamız direk olarak bir veri tabanına bağlı durumda.Bu durumda uygulama üzerinden veri tabanını etkileyecek herhangi bir işlem yapmak istediğimizde sql ifadeleri kullanmak durumundayız.Peki bu sistemin nasıl dezavantajları var da bugün sizlere anlatacağım ORM araçları ortaya çıkmıştır ?
- Öncelikli olarak eğer bir veri tabanı uygulaması yazacaksanız kesinlikle sql bilmek zorundasınız.Aksi takdirde hiç bir şekilde veri tabanı işlemlerini uygulamanıza yaptıramazsınız.
- İkinci olarak ise bu sistemde öncelikle database oluşturulup daha sonra uygulama üzerinden sql ifadeleri ile veri tabanı işlemleri yapılmaktadır.Bu durum da hem ekstra zaman kaybı ve ekstra iş kaybı yaşatmaktadır.Malumunuz üzere işverenin tek düşündüğü durum para olduğu için bizim gibi oldukça değerli olan yazılımcıların minimum zamanda maksimum iş çıkarmaları işveren için oldukça önemlidir.
- Üçüncü bir dezavantajı ise tamamen database bağımlıdır.Yani çalıştığınız yer bir anda artık bundan sonra oracle yerine mssql kullanacağız dediğinde oturulup oldukça fazla düzenlemeler yapılmak zorundadır.Hele birde düşünün ki web uygulaması yapıyorsunuz.Bu database değişikliliğine uyumun çok kısa bir süre içerisinde olması gerekmektedir değil mi ?
- Bir diğer dezavantajı ise yazılımcının database işlemleri arasında boğulup kaldığı için uygulamanın mantıksal kısımlarına gerektiği kadar zaman ayıramama durumu yaşamaktadır.
- Son olarak da uygulamanız üzerinden database deki herhangi bir nesnenin tablo , view , sp hatta kolona kadar yapısal özelliklerini değiştirmek için uzun uzadıya sql ifadeleri yazmak zorundasınız.
Evet arkadaşlar şuana kadar kullandığınız yöntem ne kadar zormuş değil mi ? Şimdi sizlere öyle bir konu anlatacağım ki siz de ben neler çekiyormuşum diyeceksiniz :) Evet tahmin ettiğiniz gibi ORM ' e giriş yapacağız.
Şimdi arkadaşlar ORM nedir ? öncelikle bu sorunun cevabıyla başlayalım.Orm yani Object Relational Mapping , veri tabanınızdaki tabloları class lara , kolonları property lere , tabloların içindeki kayıtları da object lere dönüştüren ve tüm bu dönüşün sonucunda oluşan class lar ve objeler üzerinden veri tabanı işlemlerinizi yapmayı sağlayan bir teknolojidir.Yani kısaca tanımlamak gerekirse database modelini uygulama modelindeki nesnelere uyarlar.Aslında yaptığı iş tam olarak database modelini uygulamadan soyutlayarak nesneler üzerinden işlem yapmamızı sağlar.
Orm in ne olduğunu anladıktan sonra bir de şekle dökmek gerekirse ;
Yukarıdaki şekle bakıldığında uygulama orm e bağlı olduğunu görebiliriz.Database le direk olarak herhangi bir bağlantısı söz konusu değildir.Peki burada bizim yapmak istediğimiz databse işlemlerimiz nasıl oluyor da sql ifadesi yazmadan gerçekleşiyor? . Uygulama tarafında oluşan nesneler üzerinden biz database işlemi yaptığımızda orm tarafından bu işlem sql ifadesine dönüştürülüyor.Bu işleme Code Generating işlemi denir.Tüm orm araçları aynı işlemi yaparlar.Mesela siz uygulamanızda bir nesne üzerinden bir tabloya kayıt ekleme işlemi yapmak istediğinizde orm otomatik olarak insert sql ifadesini oluşturup database e gönderir.Bu sayede sizin sql bilmenize gerek kalmamaktadır.
Orm in ne olduğunu ve nasıl çalıştığını anladıktan sonra maddeler halinde avantajlarına ve dezavantajlarına bakalım arkadaşlar.
Avantajları ;
- OOP olarak kod geliştirmeye imkan sağlamaktadır.
- Sql bilmeden bir veri tabanına bağlanabilir ve sql ile ilgili bir çok işlemi rahatlıkla yapabilmek.
- Herhangi bir database bağımlılığı yoktur.
- Oldukça esnek bir yapı sağlamaktadır.Yani oracle kullanıyorken bir anda mssql i kullanabiliriz.
Dezavantajları :
- Performans.Bir ado.net kadar hızlı çalışmamaktadır.
- Database den bilgi alış-verişi sırasında kontrol %100 bizde değildir.Bazen oluşturulan sql ifadelerinde sorun çıkabilir veya biz daha güzel ve hızlı çalışacak sql ifadeleri yazabileceğimiz durumlar olabilir.Fakat tüm sql ifadelerini code generating ile kendi oluşturduğu için bu bir dezavantajdır.
- Veri tabanı bağımsızdır.Fakat uygulama tarafındaki nesneler ile veri tabanındaki nesneler birbirine map edildiği için nesne bağımlılığı vardır.
Farklı platformlarda farklı farklı orm araçları mevcuttur arkadaşlar.Mesela java da Hibernate , microsoft ta , EntityFramework ... Aynı zamanda hibernate altyapısını kullanan ve .Net platformu için NHibernate orm aracı vardır.Daha bir çok araç mevcuttur.Fakat temelinde hepsi orm mantığı ile çalışırlar.
Elimden geldiğince ORM i anlatmaya çalıştım arkadaşlar.Sonraki makalelerimde Microsoft'un ORM araçlarından olan Entity Framework ü anlatacağım.Tekrar görüşmek dileğiyle ...
Kaydol:
Kayıtlar (Atom)

