LINQ Son Eklenen Kayıtın ID’sini almak

by Alper KOCA 26. Temmuz 2009 11:37

Uzun zamandır yazı yazamıyordum. Dün eklediğim bir verinin idsini geri almam lazımdı. Hani bildiğim bir yöntem olarak ekle sonra eklediğin parametrelerle geri çağır ve istediğin ID’yi geri al. Bu yöntemi denicektim ama öncesinde acaba LINQ bana bir kolaylık sağlamışmı diye merak ettim ve ufak bir deneme yaptım ve deney başarılı oldu :)

linq

Kullandığım table’ım yukardaki. Şimdi buna bir veri ekleyelim ve sonrasında eklediğim verinin id’sini isteyelim.

static void Main(string[] args)
{
    DataClasses1DataContext context = new DataClasses1DataContext();
    user u = new user();
    u.name = "Alper";
    u.surname = "KOCA";
    u.user_name = "alperkoca";
context.users.InsertOnSubmit(u); context.SubmitChanges(); }

Yukarıdaki kod ile ekleme işlemini yapıyoruz.

Eklediğimiz verinin id’sini alabilmek için tek yapmamız gereken SubmitChanges() metodundan sonra eklediğimiz nesnenin ID’parametresini çağırmamız olacak.

static void Main(string[] args)
{
    DataClasses1DataContext context = new DataClasses1DataContext();
    user u = new user();
    u.name = "Alper";
    u.surname = "KOCA";
    u.user_name = "alperkoca";
    context.users.InsertOnSubmit(u);
    context.SubmitChanges();
    int id = u.ID;
}

 

linq1

Tags: , , , ,

LINQ

LINQ Insert, Update, Delete

by Alper KOCA 9. Haziran 2009 13:05

LINQ çalıştığımı ve bununla ilgili yazılar yazacağımı önceki yazılarımda söylemiştim. Şimdi bu yazdıklarımın arkasında durarak LINQ ile Insert, Update, Delete işlemlerinin nasıl yapıldığına tek tek bakalım.

insert_update_delete

Kullanacağım tablom yukarıdaki gibi bunun üzerinde işlemler yapacaz.

INSERT

Insert yapabilmek için ilk başta insert yapacağımız veri lazım. Bunun için user nesnemi oluşturmam gerekiyor.

user Alper = new user();

Sonrasında da değerlerini girmem gerekiyor.

Alper.name = "Alper";
Alper.surname = "KOCA";
Alper.user_name = "alperkoca";

Yukarıda yaptığım işlemi tek satırda da C# 3.0 özelliğini kullanarakta yapabilirdim.

user Alper = new user() { name = "Alper", surname = "KOCA", user_name = "alperkoca" };

şeklinde yapmamda mümkün. Ama sonuçta benim için önemli olan user nesnemi oluşturmam ve değerlerini ayarlamam. Şimdi de benim bu yaptığım nesnemi DataContext’ime eklemem ve değişiklikleri veritabanıma aktarmam lazım.

context.users.InsertOnSubmit(Alper);
context.SubmitChanges();

ve yukarıdaki kod bu işleri benim yerime yapıyor.

DataClasses1DataContext context = new DataClasses1DataContext();
private void Form1_Load(object sender, EventArgs e)
{
    user Alper = new user() { name = "Alper", surname = "KOCA", user_name = "alperkoca" };
    context.users.InsertOnSubmit(Alper);
    context.SubmitChanges();
}

Kısa bir kod parçasıyla işimizi hallettik.

UPDATE

Update işleminde biraz bir farklılık var. Aslında işlem aynı ama Update’te bize hangi veriyi güncellememiz lazım onu veritabanımızdan almamız lazım bunun içinde bir LINQ sorgusu yazıp database'imizden verimizi alamız lazım.

user alper = (from u in context.users where u.name == "Alper" select u).SingleOrDefault();

LINQ sorgumuzla tek verimiz user sınıfımızın Alper isimli nesnesine atıyoruz. Bundan sonra Alper nesnemiz üzerinde işlemlerimizi yapıyoruz.

alper.name = "aLPER";
alper.surname = "koca";
alper.user_name = "ALPERKOCA";

istediğimiz gibi değişikliğide yapalım. Artık bunu veritabanımıza uygulayalım.

context.SubmitChanges();

Artık verimizi güncellemiş olduk.

DataClasses1DataContext context = new DataClasses1DataContext();
private void Form1_Load(object sender, EventArgs e)
{
     user alper = (from u in context.users where u.name == "Alper" select u).SingleOrDefault();
     alper.name = "aLPER";
     alper.surname = "koca";
     alper.user_name = "ALPERKOCA";
     context.SubmitChanges();
}

İşte buda bukadar :)

DELETE

Delete işlemini de yukarda anlattıklarımızdan yola çıkarak yapabiliriz. Sileceğimiz veriyi veritabanımızdan bulacağız ve sileceğiz. Hadi bunuda yapalım.

user alper = (from u in context.users where u.name == "Alper" select u).SingleOrDefault();

Yazdığımız kod ile alper nesnemize sileceğimiz nesneyi seçiyoruz. Şimdi de bunu silelim.

context.users.DeleteOnSubmit(alper);
context.SubmitChanges();

ve silme işlemimizi de tamamlamış olduk.

DataClasses1DataContext context = new DataClasses1DataContext();
private void Form1_Load(object sender, EventArgs e)
{
    user alper = (from u in context.users where u.name == "Alper" select u).SingleOrDefault();
    context.users.DeleteOnSubmit(alper);
    context.SubmitChanges();
}

Veri tabanımızda yapabilceğimiz işler bunlarla sınırlı değil ama şimdilik bunlar bir çok işimizi görecektir. Zaman buldukça diğer işlemlerin nasıl yapıldığına değinecem.

Tags: , , , ,

LINQ

LINQ to SQL Inner Join

by Alper KOCA 25. Nisan 2009 12:58

Geçende bir projem için SQL’de olan inner join yapısının LINQ’de nasıl yapılacağını araştırdım. Bağlamak istediğim tablolar aşağıdaki gibiydi.resim1

Senaryomda bir yazara ait birden fazla makalenin bulunabilmesiydi. ADO.NET ve SQL sorgularıyla önceden bunu çok rahat yapabileceğimi düşünürken LINQ’i öğrenince büyük bir eziyet çektiğimi anladım ve LINQ’de bu işi yapmaya karar verdim.

LINQ to SQL Class’ımı oluşturduktan sonra iki tabloyuda Server Explorer’dan sürükleyip oluşturduğum DataContext’e bıraktım.

resim2

Sonrada sayfamın arkasına aşağıdaki kodları yazdım.

resim3

İstediğimi yapmıştım ama aklıma takılan bazı noktalar vardı onları araştırmadan yapamadım ve join sözcüğünü kullanmadan da bunun yapılabileceğini buldum. Peki ya nasıl?

Oluşturduğum DataContext’in toolbox’ında resim4 diye bir özellik var onu kullanarak daha kolay yapabiliyorsunuz.

Seçtikten sonra Yazar tablosundan Makale tablosuna bir ok çiziyorsunuz. Sonrada karşınıza Association Editor paneli geliyor.

resim5

 

Association Properties bölümünden hangi alanlarımızı eşitlemek istiyorsak seçiyoruz ve OK butonuna basıyoruz.

resim7

Artık kod tarafımıza geçebiliriz. Kod olarakta aşağıdaki kodları yazdığımızda

 

resim8

gördüğünüz gibi intellisense’imizde tüm ilişkili tablolarımızın verileri geldi. Hiç join yazmadan bu işlemi yapabildik.

Başka yollarda vardır muhakkak ama ben bu son yolu çok sevdim ve bunu görünce de azım açık kalmıştı :D

hiç sorgu ve parametrelerle uğraşmadan direk tablo class’ımızı oluşturmak ne hoş dimi :)

Tags: , , , ,

LINQ

Powered by BlogEngine.NET 1.6.1.0 - FunkyGrunge Theme by n3o Web Designers

 

Alper KOCA

Alper KOCA
Çukurova Üniversitesi Bilgisayar Mühendisi
3. Sınıf Öğrencisi
Microsoft Student Partner