mehmetduran.com - Paylaşmak Güzeldir...
Linq to Sql - İlk Örnek Uygulamam
Bu yazımda linq to sql konusu ile ilgili ilk örnek uygulamamı ve nasıl yaptığımı anlatacağım. Bu, linq to sql'e ilk bakışımız olacak ve nasıl kullanıldığını da kavrayabileceğiz. Önceki linq konusu üzerine yazdığım yazıda bu teknolojinin yeni olduğunu ve kullanışlı olduğunu söylemiştim. Kullandıkça da bunun doğru olduğunu gördüm. Ve ilk örneği yapma ve anlatma aşamasına geldim. Yapacağım örnekte; öğrencilerin hangi dersleri aldığını linq to sql yöntemi ile sorgulayacağız. Normalde bu örneği yapmak için veritabanı ilişkileri kurmamız gerekli ancak sadece where komutu ile bu sorgulamayı yapacağız.

Öncelikle örnekte kullandığım sql veritabanım şu şekilde olacak:

Linq to Sql - İlk Örnek Uygulamam - Veritabanı
Veritabanımız ve içinde tuttuğum veriler bu şekilde. Şimdi ise linq to sql class'ını oluşturmaya geldi. Projemizde App_Code klasörü üzerinde sağa tıklayıp Add New Item deyip LINQ to SQL Classes seçiyoruz.

Linq to Sql - İlk Örnek Uygulamam - Class Ekleme

LINQ to SQL Class'ını ekledikten sonra bu class desing mode olarak açılacak. Bu ekrana kullanacağımız veritabanı tablolarını Server Explorer sekmesini açıp veritabanımızdan çekip ekliyoruz. Aşağıdaki gibi hazırlıyoruz.

Linq to Sql - İlk Örnek Uygulamam - Şema
Bu şemayı da oluşturduktan sonra kodlama kısmına geçebiliriz. Kodlama kısmında sayfamızda bulunan ve öğrencileri seçeceğimiz dropdownlisti dolduracağız. Daha sonra bu dropdownlistten seçilen öğrencinin aldığı dersleri getiren sorgulamayı yapacağız. Bütün bu işlemlerde linq to sql yöntemini kullanacağız. Kodlarımız ise şöyle olacak:

    protected void Page_Load(object sender, EventArgs e)
    {
        DataClassesDataContext db = new DataClassesDataContext();
 
        if (!IsPostBack)
        {
            var drop = from kisiler in db.isimlers
                       select new { kisiler.ogrenci_id, kisiler.isim };
            DropDownList1.DataSource = drop.AsEnumerable();
            DropDownList1.DataTextField = "isim";
            DropDownList1.DataValueField = "ogrenci_id";
            DropDownList1.DataBind();
        }
 
        var query = from isim in db.isimlers
                    from ders in db.derslers
                    from ilisk in db.iliskis
                    // öğreniye göre dersleri getiren sorgumuz
                    where isim.ogrenci_id == ilisk.ogrenci_id && 
                        ders.ders_id == ilisk.ders_id && 
                        isim.ogrenci_id == int.Parse(DropDownList1.SelectedValue)
                    select new { ders.ders };
 
        GridView1.DataSource = query.AsEnumerable();
        GridView1.DataBind();
    }

Görüldüğü gibi kodlarımız böyle. Bana göre gayet anlaşılır ve basit. Bu yöntem ile birçok karmaşık veritabanı ilişkilerini rahatlıkla kurabiliriz. Tabi ben burada basit yolu seçtim. İlerde bu ilişkileri farklı olarak nasıl kurabileceğimizi de vereceğim örneklerde bulabilirsiniz. Yaptığım uygulamanın ekran görüntüsü ise şöyle:

Linq to Sql - İlk Örnek Uygulamam - Ekran Görüntüsü
İyi Çalışmalar!
Mehmet Duran 16 Eylül Salı 2008 8 55477 2,5
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar LISCH ve EISCH Algoritmaları Linq in Action (E-Book) Eğitim Tadında Etkinlik 2009 - Gazi Üniversitesi Building XNA 2.0 Games (E-Book) Visual C# 2008 E - Book
Yorumlar
Yorum Yaz
RSS Yorum Takibi
hasan chutchus 14 Ağustos Cumartesi 2010 08:47 #1
yazınız için teşekkürler bir sorun olacak. program çalışırken yeni bir tablo oluştuğunu düşünürsek mesela ismi Tablo1 olsun. Bu .dbml uzantılı sınıfın Tablo1'i de temsil eden bir sınıf haline gelmesini nasıl sağlarız,Kodlarla bunu yapmam gerekiyor bir türlü bulamadım.. Yardımlarınız için şimdiden teşekkürler.
Mehmet Duran 14 Ağustos Cumartesi 2010 09:53 #2
Merhaba. Linq to Sql veya Entity alt yapıları veritabanındaki tablolara göre kod üreten araçlar. Burada sen buna müdahele edip, sonradan oluşturacağın tabloları eklemek istiyorsun. Bunun için dbml dosyalarına müdahele edip, üretilen kodlara uygun biçimde kendi kodlarını eklemelisin. Ancak bu yol çok riskli. Dbml dosyalarına dışardan müdahele edildiğinde hata alma olasılığın yüksek. Bunun yerine tabloları en başta belirleyip modelleri ona göre oluşturmak lazım veya tablo oluştukça modeli güncellemek gerekiyor.
Hasan chutchus 14 Ağustos Cumartesi 2010 16:46 #3
cvbınız için teşekkür ederim. Ben aslında koda müdahele etmek istemiyorum. şöyleki oluşucak tablolar aynı yapıda olucaklar sadece isimleri ve içindeki kayıtlar farklı olacak oluşturulan ilk baştaki DataClassContext.dbml sayesinde bundan örnekler oluşturularak program her çalıştığında mesela bütün tabloları temsil etmesini sağlayamazmıyım ?
Mehmet Duran 16 Ağustos Pazartesi 2010 15:38 #4
Dbml dosyalarında farklı tabloları tek bir sınıf ile temsil edemezsin. Her tablo başlı başına bir nesne olarak ifade edilir. Böyle birşey için Dbml değil de kendi oluşturacağın bir yapıyı kullanabilirsin.
ali karabulut 31 Aralık Cuma 2010 12:14 #5
Merhaba Mehmet Bey, Size amatör bir programcı olarak bir soru sormak istiyorum. web projemde bir adet Yil.dbml dosyası var ve Yil.designer.cs içindeki [global::System.Data.Linq.Mapping.DatabaseAttribute(Name="2010Veri")] yukarıdaki "2010Veri" veritabanın kullanıcıya nasıl seçtirebilirim, mesela "+Profile.AktiveDatabase+" gibi seçim yaptırabilirmiyim. ilginiz için şimdiden teşekkürler
Mehmet Duran 06 Ocak Perşembe 2011 11:35 #6
@ali, Linq to sql dosyaları otomatik olarak generate ediliyor ve kullanıcı müdahelesi söz konusu değil. Ancak linq to sql'in başka yöntemleri olabilir araştırmak lazım. Ancak bana göre linq to sql ile böyle birşey yapmak zor. Böyle birşey linq to sql olmadan kendi oluşturacağın nesneler ve alt yapı ile yapabilirsin.
Mustafa 22 Nisan Cuma 2011 20:11 #7
Merhaba ben tabloları sürüklerken bir hata alıorum: "the selected object(s) use unsupported data provider" hata neden kaynaklanıo acaba?
Mehmet Duran 22 Nisan Cuma 2011 23:13 #8
@Mustafa, bağlantı yaparken seçmiş olduğu provider'ın doğru olduğuna emin olmasın. Ado.net provider seçmiş olman gerekir. Ancak bu hatayı hiç almadığım için tam olarak sebebi ve çözümü nedir bilemiyorum.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Büyük işler gibi, büyük düşüncelerinde davula ihtiyaçları yoktur.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009