Respond needs javascript to run. To find out more click here
linq to sql datacontext » Serdar Demir
RSS
 

Posts Tagged ‘linq to sql datacontext’

Linq to sql nedir ?

10 Nis

Linq to sql e ilk adımımız

Linq .net 3.5 ile gelen yeni teknolojilerden,  Linq teknolijisi tamamen veri erişim işlemini daha kolay ve anlaşılır hale getirme amaçlı. Bu veri erişim yöntemleri Linq to XML,Linq to object ve linq to sql olarak veri kaynağına göre değişiklik göstermekte. Biz bugun linq to sql i inceleyeceğiz.

Bundan önceki veri erişim yöntemi ado.net ti (okullarda hala bize bunu öğretiyorlar J) şimdi gelelim ikisinin farkına öncelikle şunu belirteyim linq to sql ile yaptıklarımızı ado.net ile de yapabiliriz. Fakat burda önemli olan daha kolay kullanım ve kod kısalığıdır. Klasik yöntemde nasıl yapıyorduk? En basitinden veritabanından veri çekmek için connecting stringler datatable lar datadapterler sql command bağlantıyı açma kapama gibi bir çok nesne ye ihtiyaç duyuyorduk küçük çaplı uygulamalarda bu pek göze batmıyor fakat 1000 satırlık kodu 100 satıra indirmeyi kim istemezki hemde çok kullanışlı bir şekilde lafı çok uzattık geçelim artık linq to sql  e :) ve northwind veritabanını kullanarak uygulama geliştirelim.

Öncelikle projeyi açıp add new item diyerek linq to sql class ekliyoruz.

Bize bir sayfa oluşturacak bu sayfada ise solution explorer dan projemizde kullanacağımız tabloları sürükleyip bu alana bırakıyoruz nortwind tablosunun category ve products tablosunu ekliyorum. Linq to sql bu tablolar arasında olan bire çok ilişkiyi otomatik oluşturuyor. Eğer bu işlemi manuel yapmak istersek toolbaxtan “Association”  ekleyip ilişkiyi siz beliryebilirsiniz. Bu kısımda tablo isimlerini değiştirmek isterseniz yine bu kısımda tablolarınızı türkçeleştip kullanabilirsiniz

Şimdi gelelim form kısmına öncelikle eklediğimiz linq to sql sınıfından  bir tane oluşruyoruz.

SqlConnectionStringBuilder ayar = new SqlConnectionStringBuilder();

ayar.IntegratedSecurity = true;

ayar.InitialCatalog = "Northwind";

ayar.DataSource = ".";

SqlConnection con = new SqlConnection(ayar.ConnectionString);

con.Open();

SqlCommand cmd = new SqlCommand("select * from Categories ", con);

DataTable dt = new DataTable();

SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read())

{

listBox1.Items.Add(dr.GetString(0));

}

Yukarda da görüldüğü gibi basit bir işlemde bile kod  neredeyse 2 katına çıktı bunun çok büyük bir uygulama olacağını düşündüğümüzde fark çok açıktır. Diyelim ki bizim şimdi yapacağımız gibi 2 tabloyu bağlama işlemi yapacaksınız bunu  ado ile yapacaksanız  datarelation gibi ekstra nesneler kullanmanız gerekecek J yani dediğim gibi işler değiştikçe kod çok karışıyor. Bu işlemleri şimdi linq ile yapalım.

Linq to sql de join

DataClasses1DataContext dc = new DataClasses1DataContext();

var urunler = (from p in dc.Products

join c in dc.Categories on p.CategoryID equals c.CategoryID

select p.Category.CategoryName).Distinct();

foreach (var item in urunler)

{

MessageBox.Show(item.ToString());

}

Products ve categories tablosunda ortak sütun category id ye göre inner join işlemini gerçekleştirdik.

Şimdi de linq to sql ile where ve like işlemi:

//Where işlemi

DataClasses1DataContext dc = new DataClasses1DataContext();

var urun = from urunler in dc.Products

where urunler.ProductName.Contains("Chai")

select urunler.ProductName;

foreach (string item in urun)

{

listBox1.Items.Add(item);

}

//like işlemi

DataClasses1DataContext dc = new DataClasses1DataContext();

var urunler = from p in dc.Categories

where SqlMethods.Like(p.CategoryName, "B%")

select p.CategoryName;

foreach (var item in urunler)

{

listBox1.Items.Add(item);
}

Like işlemini kullanabilmeniz için sqlmethods un yer aldığı data.sqlclient kütüphanesini eklemeniz gerekmektedir.

Linq to sql group by işlemi

DataClasses1DataContext dc = new DataClasses1DataContext();

var urun = from urunler in dc.Products

group urunler by urunler.ProductName;

foreach (var item in urun)

{

listBox1.Items.Add(item.Key.ToString());

}

Şimdi gelelim veri işleme kısmına “Update Delete ve Insert” işlemleri

Linq to sql insert işlemi

Diyelim ki okul adında bir tablomuz var ve biz bu tabloya okul adı ve adresini girmek istioruz.

void kaydet()

{

DataClasses1DataContext dc = new DataClasses1DataContext();

okul yeni = new okul()// Tabo adımız

{

okuladi = "Mersin Üniversitesi",

adres = "Erdemli"

};

dc.okuls.InsertOnSubmit(yeni);

dc.SubmitChanges();
}

Linq to sql delete işlemi

Insert işlemi ile eklediğimiz kaydı silelim;

void sil()

{

DataClasses1DataContext dc = new DataClasses1DataContext();

okul yeni = dc.okuls (k => k.okulid == 0);

dc.okuls.DeleteOnSubmit(yeni);

dc.SubmitChanges();

}

Şimdi burda şimdiye kadar görmediğimiz bir ifade ile karşı karşıyayız lambda ifadesi => yani yukarıdaki kodun karşılığı k adında takma bir kayıt oluşturduk. Ve bu kaydın id si 0 olan ilk kaydı silmesini istiyoruz. Silme işlemide bir bakıma güncelleme yapılmasını gerektirir bu yüzden update işleminide bu mantıkla yapacağız.

Linq to sql update işlemi

void guncelle()

{

DataClasses1DataContext dc = new DataClasses1DataContext();

okul yeni = dc.okuls.First(k => k.okulid == 0);

yeni.adres = "safranbolu";

dc.SubmitChanges();

}

Bir sonraki makalemizde => ifadeleirini ayrıntılı olarak inceleyeceğiz.

 
4 Comments

Posted in C#, Makaleler