LINQ to SQL , Linq Select,İnsert,Update Kullanımı
Merhaba arkdaşlar bu makalemde sizlere linq ile insert,update select kullanımı hakkında bilgi vereceğim.
LinQ to Sql Nedir Hakınnda sizlere kısa bilgi vereyim.
LINQ to SQL .NetFramework 3.0'la birlikte gelen ORM(Object Relational Mapping) uygulamasıdır.Database'de oluşturduğumuz tablolara karşılık gelen classlar'ı oluşturan,uygulayan yapıdır.LINQ to SQL ile database'e çeşitli sorgulamalar ve insert,update,delete işlemlerini yaptırabilirsiniz. Ugulamamızda şimdi LINq to SQL classlar'ının oluşturulmasına ve class'ların çeşitli methodlarını inceleyemeye,sorgular çekmeye başlıyabiliriz.
Öncelikle web projemizi açıyoruz .Projemizde sağ tık Add New İtem seçip LINQ to SQL Classes item ekleme işlemi yapıyoruz. Aşağıdaki resimde nasıl yapıcağım ileilgili resim bulunmaktadır. NorthWind.dbml olarak isimlendiriyorum sizler istediğiniz ismi verebilirsiniz.

Linq Classes ekledikten sonra Visual Stüdüo ekranında sol kısımda “Server Explorer” kısmı bulunmaktadır.Buradan Add connection diyerek Northwind db’yi ekliyoruz ve sonrasında NorthWind.dbml’li açıyorum Server Explorerden tablolarımızı sürüklüyoruz örnek resim aşağıda gösterilmiştir.

Resimde görüldü gibi her tabloma denk gelen class’larımı oluşturmuş oluyorum.Eğer Nortwind.designer.cs class’ımı açarsak oluram oluşturulan bütün tabloları propertyleri(insert,delete,update) methodlarını görmüş oluyoruz.
DataContext Sınıfı ve LINQ to SQL sınıflarına Erişim:
Oluşturulan Ana sınıfınız veritabanınızın adı+DataContext şeklinde gelir dilerseniz siz bu ismi değiştirebilirsiniz.Benim kullanacak olduğum class'ın adı NorthwindDataContext.
Instance alımı : NorthwindDataContext dc = new NorthwindDataContext();
Sınıflara Erişim : C# 3.0 la beraber gelen Object Initializers ....:
Category ct = new Category(){CategoryName="Beverages",Description="açıklama..."}; //Object Initializers kullanımı
eğer bunu kullanmasak nasıl yapıcaktık,tabikide instance uzerinden butun property'lerime ulaşıp değerlerini tek tek verecektim...
ct.CategoryName="kategorAdi";
ct.Description="descrp";
Linq İle Select işlemi:
Select işlemi ile veritabanınında verileri çekiyoruz.Northwind db’den ürünleri DropDownList’e listeliyoruz sonrasında bu dropdownlistte seçilenin value yakalıyoruz ilişkili tablomuzda ürünlere ait siparişler tablomuzu listeliyoruz .kaynak kodllar ağıda gösterilmiştir.
protected void Page_Load(object sender, EventArgs e)
{
NortwindDataContext db = new NortwindDataContext();
if (!IsPostBack)
{
//Burada Ürünleri Listeliyoruz Ürünlere ait Siparişleri listeliyoruz.
var drop = from Cat in db.Products
select new { Cat.ProductName, Cat.ProductID };
DropDownList1.DataSource = drop.AsEnumerable();
DropDownList1.DataTextField = "ProductName";
DropDownList1.DataValueField = "ProductID";
DropDownList1.DataBind();
} var sorgu = from urun in db.Products
from sip in db.Orders
from ilisk in db.Order_Details
//Ürünle Siparişleri getiren Sorgumuz.
where urun.ProductID == ilisk.ProductID &&
sip.OrderID == ilisk.OrderID &&
urun.ProductID== int.Parse(DropDownList1.SelectedValue)
select new {sip.OrderID,sip.OrderDate};
GridView1.DataSource = sorgu.AsEnumerable();
GridView1.DataBind();
}
}
Örnek Uygulamanın çalışır halde görüntüsü aşağıda gösterilmiştir

Linq İnsert işlemi:
Linq ile insert işlemini Category tablomuzdaki kolonlara ekleme yapıyoruz. Örnek kodlar aşağıda gösterilmiştir.
protected void Button1_Click(object sender, EventArgs e)
{
NortwindDataContext db = new NortwindDataContext();
Category ct = new Category() { CategoryName = TextBox_catName.Text.Trim(), Description = TextBox_Description.Text.Trim() };
db.Categories.InsertOnSubmit(ct);
//oluşturdugum category nesnesini datacontext'in içindeki kategoriler class'ına ekledim
db.SubmitChanges();
//Değişikleri kaydettim.
//***Verilerin Kaydedilmesi submitChanges methodunu Kullanmamız gerekiyor kullanılmazsa veriler veritabına kaydedilmez.
//Değişiklikleri onaylamadan kontrol amaçlı etkilenen(update,insert,delete)işlemlerini
//GetChangesSet methoduyla kontrol edip (işlemler beklemede) daha sonra değişiklikleri Ugulayabiliriz.
}
Uygulamanın çalışır haldeki resim’i aşağıda gösterilmiştir.

Linq Delete İşlemi:
Linq Detele işleminde ürünleri listeliyoruz sonrasında silme işlemini DeleteOnSubmit ile yapıyoruz.örnek kodlar aşağıda gösterilmiştir.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetProducts();
}
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
LinkButton lnk = (LinkButton)sender;
string gelenId = lnk.CommandName;
NortwindDataContext dc = new NortwindDataContext();
Product pro = dc.Products.First(p => p.ProductID == int.Parse(gelenId));
dc.Products.DeleteOnSubmit(pro);
dc.SubmitChanges();
//var query = from cat in dc.Categories where cat.CategoryID == int.Parse(gelenId) select cat;
////linq sorgusuyla where kriterini kullanarak silinicek kategoriyi seçiyoruz ve datacontext
////nesnemin deleteOnSubmit methoduna gonderdim
//dc.Categories.DeleteOnSubmit(query as Category);
//dc.SubmitChanges();
GetProducts();
}
public void GetProducts()
{
NortwindDataContext db = new NortwindDataContext();
//Burada Gridview'e Kategorileri listeliyoruz.
var sorgu = from pro in db.Products
select new { pro.ProductID, pro.ProductName };
GridView1.DataSource = sorgu.AsEnumerable();
GridView1.DataBind();
}
Çalışan uygulamanın ekran görüntüsü.

Linq Update İşlemi
Linq update ile Kategori tablosundan kategorisi 9 olanı veya herhangi tablomuzu update ediyoruz. Update ediceğimiz tabloyu ver koşulu iler belirtip SubmitChanges(); mehthodu il update ediyoruz. Ornek Kodlar aşağıda belirtilmiştir.
protected void Button1_Click(object sender, EventArgs e)
{
NortwindDataContext dc = new NortwindDataContext();
//Kategorisi 5 Olan Kategoriyi güncelleme yapıyoruz.
Category kategori = dc.Categories.First(k => k.CategoryID == 9);
kategori.CategoryName = TextBox_catName.Text.Trim();
kategori.Description = TextBox_Description.Text.Trim();
dc.SubmitChanges();
}
Çalışır uygulama göruntusu aşğıdadir.

Linq Toplu Silme İşlemleri
NortwindDataContext dc = new NortwindDataContext();
var query = from c in dc.Categories where c.CategoryName == "Condiments" select c;
//linq sorgusuyla where kriterini kullanarak silinicek kategoriyi sectim ve datacontext
//nesnemin deleteOnSubmit methoduna gonderdim
dc.Categories.DeleteAllOnSubmit<Category>(query);
//birden fazla kayit silme işlemi için kullanılan method
dc.SubmitChanges();
Linq Toplu İnsert İşlemleri
protected void Page_Load(object sender, EventArgs e)
{
NortwindDataContext db = new NortwindDataContext();
List<Category> eklenecekKategoriler = new List<Category>();
//For dönerek 10 kere ekleme işlemi yapıyoruz kategorilere.
for (int i = 0; i < 10; i++)
{
Category yenicat = new Category();
yenicat.CategoryName = "KategoriAdi";
yenicat.Description = "deneme";
eklenecekKategoriler.Add(yenicat);
}
db.Categories.InsertAllOnSubmit(eklenecekKategoriler);
db.SubmitChanges();
}
Bu makalemizde sonuna geldin bir dahaki makalede görüşmek üzere.
Uygulamanın çalışır haline ulaşmak için mail yolu ile ulaşabilirsiniz.