Soru & Cevap

ASP.net EntityFrameWork tablo join sorunu

30.08.2020 - 02:32

Merhaba,

 

Asp.net de Entity Framework yapısını kullanarak repeater içerisinde #Eval tag'i ile veri listelemeye çalışıyorum.

Ancak .cs tarafında oluşturduğum sorgu yapısında datasource boş dönüyor. Join yapmadan sorgu yaptığımda istediğim veriyi listeleyebiliyorum ancak join yaptığımda istediğim sonucu alamıyorum.

Örnek olarak kod bloğumu paylaşıyorum;

            SiteDB db = new SiteDB();
            TBL_MAKALE makale = new TBL_MAKALE();
            TBL_BASLIK baslik = new TBL_BASLIK();
            // var Listele = db.TBL_MAKALE.OrderBy(s => s.Makale_Icerik).ToList();
            var Listele = (from s in db.TBL_MAKALE
                           join f in db.TBL_BASLIK on s.ID equals f.Makale_ID
                           select new
                           {
                               makale.Makale_Icerik,
                               baslik.MakaleBaslik,
                               makale.Makale_Durum
                           }).ToList();
            myRepeater10.DataSource = Listele;
            myRepeater10.DataBind();

repeater içerisinde yer alan #Eval tag örneğim;

     <a>
                      <%#Eval("MakaleBaslik")%>
                          </a>   
                          <br/>
                      </td>
                      <td class="project_progress">
                          <small>
                              <%#Eval("Makale_Icerik")%>
                          </small>
                              </div>
                          </div  
                      </td>
                      <td class="project-state" style="width: 302px
                          <span class="badge badge-success"><%#Eval("Makale_Durum")%></span
                      </td>

DB tarafında makale tablosu içinde yer alan ID alanı Baslık tablosunda ki Makale_ID alanına bağlanmış durumda.

Insert ederken makale tablosunda ki ID değerini baslık tablosunda ki Makale_ID alanına gönderebiliyorum. Insert etme noktasında sorun yok.

Yardımcı Olabilirseniz sevinirim. Herkese İyi Çalışmalar.

123 Görüntülenme

5 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-150204-1598790447.png
sercan.isleklekler
01.09.2020 - 09:52

Çözüm önerinizi denedim. İstediğim sonuca ulaştım. Hatamı gösterdiğiniz ve yardımcı olduğunuz için teşekkür ederim.

picture-150204-1598790447.png
sercan.isleklekler
31.08.2020 - 12:30

Çözüm noktasında ki önerilerinizi dikkate alıcam teşekkür ederim.

Profile picture for user chnkyn01
chnkyn01
31.08.2020 - 12:23

1- Çözümün yanlış.Uniqueidentifier özelliğinde tanımlayabilirsin ve yeni makale eklerken, bu başlıkta bir makale var ise kaydedilmesini business katmanında önleyebilirsin zaten.

2-Veritabanı (mssql management studio da) zaten hepsi ayrı kategorilerde listelenir.Tablola Tables altında, Viewlar Views altında.Okunabilirliğini zorlaştırıyorsun sadece.

picture-150204-1598790447.png
sercan.isleklekler
31.08.2020 - 09:25

 

1. Makale başlığı ve makale içeriğinin ayrı tablolalarda olmasının sebebi aynı başlıkda birden fazla makale yer alsın istemiyorum. Bu sebeple veri tekrarını engellemek nedeniyle farklı tabloda tutarak makale içeriklerini ID ile bağlayıp böyle bir çözüm ürettim.

2. Tablo isimlerinin başına TBL ya da VW eklememin sebebi yazarken bana kolaylık sağlaması view ise başında VW tablo ise başına TBL yazarak önüne geçmek istedim zira işler ilerledikce beni karıştırıyor.

3. Yönteminizi bugün içerisinde deneyip geri döneceğim.

Vakit ayırıp ilgilendiğiniz ve cevap verdiğiniz için teşekkür ederim.

 

Profile picture for user chnkyn01
chnkyn01
31.08.2020 - 03:35

kodlardan yeni olduğun anlaşılıyor.

1. Makale başlığı makale ile anlam bağlantısı vardır.Bu yüzden ayrı bir tabloda tutulması hatalı olur.Eğer öyle ise makale içeriğini de ayrı tabloda tutabilirsin.Veritabanı Normalizasyon işlemlerini araştır.

2. Veritabanında tablo isimlerinin başına tbl, table gibi isimlendirmeler ekleme.Makale ile ilgili ise direk Makale olarak ekle.

3. hatan ise ; Anonymous metodu (select new) yanlış kullanıyorsun.TBL_MAKALE makale = new TBL_MAKALE(); ile instance oluşturmuşsun ama senin repeaterın Listele query syntax'ından gelen verileri kaynak olarak almış (myRepeater10.DataSource = Listele;).

yani TBL_MAKALE makale = new TBL_MAKALE(); tanımı hiç bir işe yaramıyor.Bu satırı silebilirsin.

Anonymous metodunu kullandığın eval metoduna göre aşağıdaki gibi düzenliyorum.

var Listele=(from s in db.TBL_MAKALE
                           join f in db.TBL_BASLIK on s.ID equals f.Makale_ID
                           select new
                           {
                               Makale_Icerik = s.Makale_Icerik,
                               MakaleBaslik = f.MakaleBaslik,
                               Makale_Drurum = s.Makale_Durum
                           }).ToList();

Bunları deneyip cevap yazarsın.