SqlCommand Eziyetine Son Devrim Yaratacak Konu Entity Framework Nedir Basit Kullanımı

ibanez75612

Katılımcı Üye
21 Nis 2012
506
1
IIS
EntityFramework.png

Merhaba arkadaşlar forumun eski üyelerindenim ancak forumda hala eski konular açıldığını fark ettim ve herkez genel olarak SqlCommand SqlConnection olayını kullanıyor bu da çok zaman kaybına neden oluyor bende artık herkesin EntityFrameWork'ü ögrenmeniz gerektiğini düşünüyorum. Uzun zamandır düşündüğüm için bugün de boş vaktim olduğu için yazma kararı verdim.

Konuyu çok detaylı yazmadım bir çok fazla şey yapabilirsiniz hem kafanızda bir fikir olsun hemde youtube'da bir çok örnek bulunmakta 3 Saat uğraştım bu arada umarım bişeyler anlarsınız birde yazıları bazen başlıklarını bazen küçük yazma takıntım var kusura bakmayın o konuda bazılarını düzelttim bazılarına üşendim :)

Öncelikle EntityFrameWork Nedir ?​

EntityFramework Microsoft tarafından geliştirilen .Net tabanlı bir ORM “Object Relational Mapping” aracıdır. Veritabanı ile köprü bir araçtır örneğin database'inizi oluşturdunuz ve o database'de bir çok tablo ve kolonları bulunmakta EntityFrameWork bu konuda Veritabanındaki tabloları class’lara, kolonları property’lere, kayıtları ise objelere dönüştürerek uygulamanın direkt olarak veritabanına erişmesine gerek kalmadan tüm veritabanı işlemlerini gerçekleştirir. Böylelikle hiç sql querysi yazmayız ve bizim yazdıgımız Linq sorgularını alıp querye çevirir.​


Linq Nedir ?

LINQ kodlarımız içerisinde, farklı dil kullanmadan, çeşitli ortamlardaki verileri sorgulayıp, filtrelemek için kullanılır. Örneğin Linq'yu Generic Collectionlarda da kullanabilirsiniz. Where Select Count Sum GroupBy gibi birebir sql ile aynı şeyleri sorgular


Şimdi bir SqlConnect'li bir örnek yapalım birde linq sorgusu yazarak karşılaştıralım





İlk Olarak SQlConnection Yazma Bağımlılığınız Sürekli Bulunmakta
Kod:
   [COLOR="Red"]SqlConnection baglan = new SqlConnection("server=.;database=Northwind;trusted_connection=true")[/COLOR];
Daha sonra SqlCommand ile Query Yazmalıyız Bunu +degişken + Şeklinde Yazarsak SqlInject Yemek Gibi Bir Durumumuz Var Bunu Yememek İçin Ise Parametre Kullanıyoruz Oldumu Bize Zaman Kaybı. Birde Joinli Olunca Query Uzadıkça Uzarrrr :kızgın
Kod:
 [COLOR="Red"]  SqlCommand komut = new SqlCommand("select orderıd from orders o join employees e on e.employeeId=o.employeeId where e.firstname+' '+e.lastname=@par", baglan);

            komut.Parameters.AddWithValue("@par", comboBox1.Text);[/COLOR]

Birde Şimdi While Döndürüp İçerisindeki Verileri Bir Degişkene Basacağım Birde Connection Açıp Kapatacağım ooooff


Kod:
[COLOR="Red"] if (baglan.State == ConnectionState.Closed)
            {
                baglan.Open();
                SqlDataReader read1 = komut.ExecuteReader();
               SqlDataReader read = komut.ExecuteReader();

            while (read.Read())
            {


                int orderıd = read.GetInt32(0);
                listBox1.Items.Add(orderıd);


            }

            baglan.Close();
            }[/COLOR]

SqlConnectionlu Şekli Böyleydi Bunu Birde EntityFrameWorkle Yapalım İlk Orneğim Tablo bağlantısız olacak gerçi olursa da sıkıntı yok :) aynı şey


Kod:
 [COLOR="DeepSkyBlue"] NorthwindEntities db = new NorthwindEntities(); [/COLOR] //entitynin Instancesinı aldık 

          [COLOR="Red"]   var sorgu = (from i in db.Products select i.ProductName).ToList();
listBox1.DataSource = sorgu; // veriyi  bastık
[/COLOR]

3 Satır Kod Ile Hem Zaman Kazandık Hem Her Seferinde Ado.Net Model Oluşturmak Zorunda Değilsiniz. Sorguyu Yazıp Yapıştırıyorsunuz Her Seferinde Çok Kullanışlı



EntityFrameWork'ü Nasıl Oluştururuz ve Kuralları​


Oluşturdugunuz Tablodaki Bir Kolon İllaki Primary Key Olmalıdır

Örnek Tablo
Kod:
[COLOR="Cyan"]Create table Product(ProductID int identity primary key,ProductName nvarchar(50))[/COLOR]


Entity FrameWork Kullanmak İçin Solitionumuz da Ado.Net Model Oluşturmalıyız Buradan Sonra Resimli Olarak Anlatmaya Devam Edeceğim



Solitionumuzda Add'diyip Sonra New Item'a Tıklıyoruz


Burada Sol Kısımdan Dataya Tıklıyoruz Ado.Net EntityModeli Seçiyoruz


Burada Databasemiz Hazır Olduğu İçin İlk Seçeneği Seçiyoruz Diğer Seçenekleri Kullamadığım İçin Yorum Yapmayacağım


Böyle Bir Ekran Gelecek Ama Benim Daha Önceden Oluşturduğum Online Database Olduğu İçin Gizledim Sağdan New Connectiona Basıyoruz.



Burada Database Bilgilerini Giriyoruz Local Kullandığım İçin . yazdım Alt Kısımda da Database Seçtim Size Örnek İçin Hazır Nortwind Database Seçtim



Böyle Bir Ekran Geldiyse Başarmışızdır Buradan Sonra Next Yapıyoruz Ama Burdaki Alt Kısımda Yazan NorthwindEntities Çok Önemli Bunu Çağırıp Instance Alıp Database İşlemleri Yapıcaz Bir Yere Not Alın


Bu Ekranda Tabloları Seçiyoruz Table Kısmını Tiklerseniz Direk Tüm Tabloları Seçer





Burada Bağlı Tablolar ve Kolonları Çıktı Gördüğünüz Gibi Buradan Sonra İşlemimiz Tamamlandı.

Bu Işlemi Sadece Bir Kere Yapıyorsunuz Ve Daha Sonra Projenizde Hiç Ugraşmıyorsunuz. Connection Gibi Bir Eziyet V.b Şeyler Yok.






Şimdi Biraz Daha Linq Hakkında Teknik Konuşalım[/CENTER]

Sorgunuz Birden Fazla Öge İçeriyor İse ToList() Kullanacaksınız Liste Halinde Gelecek Foreach'le döndürmeniz gerekebilir Asp.Net.Mvc için veya DataSource Basıp Geçersiniz
Sorgunuz Tek Bir Sonuç Döndürüyor İse SingleOrDefault() Kullacaksınız o da ya içerisine 1 öge yada hiç null deger alır.

Öncelikle From i in db Şeklinde Bir Sorgu Yazıyorum Bu From i in Deki From'un Yazılış Sebebi De Tablo Adını Sorduğu İçindi Ve i Dedigim Benim Salladığım Bir şey a da Olur z ,de olur o hiç farketmez daha sonra Oluşan Entitiesdeki Db'ye db.Product Şekilde tabloyu getirdim zaten InteliSense Mevcut Göreceksiniz Daha Sonra select i diyorum yani tablonun tüm kolonlarını çek diyorum select i.Product Deme Sebebim Datasource sadece 1 tip veri alıyor o yüzden öyle yazdım tüm hepsini almıyor.


--------------------------------------------------------------------------------------------------------------

Örnekler​
Şimdi ki Örneğim Product Tablosundaki 5 ID'li Ürünü Bulup Product Tablosundaki Istediğim Kolunun Verisini Çekip Label'a Basacağım.

Bunuda Gift Olarak Yaptım Hiç Uğraşmayalım Hemde İnteliSenseyi Görün Diye




VnNPsct.gif

Birde Update Örneği Yapacağım ID'si 5 Olan Ürünün İsmini Degiştirelim Oda gifli

WVdoV0U.gif



Birde Insert (Ekleme) İşlemi Yapalım

o9bZRA8.gif





Buraya kadar okuduysanız teşekkürler öncelikle sürekli Instance alma sebebim bir daha yapışınızda unutmamanız onu class düzeyinde yazıp default constructer'da bir kere Instance alıp orada kullanıp 1 satır daha işleminizi kısaltabilirsiniz. :RpS_thumbsup:​
 
Son düzenleme:

Pentester

Özel Üye
8 Eyl 2016
1,646
1,001
Ellerine sağlık. Artık ado net kullanmak mantıklı değil. Entity mutlaka kullanın. Code first yaklaşımı özellikle çok hoşuma gidiyordu. Classlar içinde propertyler ile veritabanı oluşunca hoşuma gidiyordu. Sen kod yazıyorsun, veritabanı otomatik oluşuyor. Ayrıca asp.net web formdan da uzak durun, çünkü artık kolay kolay kullanılmıyor. Asp.net mvc ve core mvc öğrenin.

Ama ado net sorguları yazmakta keyifliydi he :D
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.