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ı classlara, kolonları propertylere, 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
Ş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];
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
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
Ö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
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.
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.
Bunuda Gift Olarak Yaptım Hiç Uğraşmayalım Hemde İnteliSenseyi Görün Diye
Birde Update Örneği Yapacağım ID'si 5 Olan Ürünün İsmini Degiştirelim Oda gifli
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:
--------------------------------------------------------------------------------------------------------------
Şimdi ki Örneğim Product Tablosundaki 5 ID'li Ürünü Bulup Product Tablosundaki Istediğim Kolunun Verisini Çekip Label'a Basacağım. Örnekler
Bunuda Gift Olarak Yaptım Hiç Uğraşmayalım Hemde İnteliSenseyi Görün Diye
Birde Update Örneği Yapacağım ID'si 5 Olan Ürünün İsmini Degiştirelim Oda gifli
Birde Insert (Ekleme) İşlemi Yapalım
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: