2017-03-17 22 views
0

我嘗試使用實體框架構建簡單的Web Api。我從我的數據庫的表中獲取所有行,並將所有數據顯示爲JSON對象。但是我有一個關於獲取某些列的值的問題,它與另一個表有關係。此問題導致獲取空的JSON對象。下面是我的代碼獲得方法Web API獲取方法在JSON中返回空

public class ProjeOzet_Repository 
    { 
     private MGEOPROJETAKIPT_TEntities db = new MGEOPROJETAKIPT_TEntities(); 

     public IQueryable<ProjeOzet> GetProjeOzets() 
     { 

      var projeOzet = from p in db.PROJE_OZET 
          join pt in db.PO_PROJE_TURU on p.PROJE_TURU equals pt.ID 
          join dir in db.PO_DIREKTORLUK on p.P_YURUTEN_D equals dir.ID 
          join gb in db.PO_GRUP_B on p.P_YURUTEN_GB equals gb.ID 
          join mud in db.PO_MUDURLUK on p.P_YURUTEN_M equals mud.ID 

          join yon in db.Z_Personel_MGEO_BAK on (int)p.P_YONETICISI_SNO equals yon.SNO 
          join kat in db.PO_KATEGORI on p.P_KATEGORI equals kat.ID 
          join f in db.PO_FAZ on p.P_FAZ equals f.ID 
          select new ProjeOzet() 
          { 
           Id = p.PROJE_ID, 

           gizli = p.GIZLI, 
           raporlanacak = p.RAPORLANACAK, 

           projeNo = p.PROJE_NO_MGEO, 
           projeTanim = p.P_TANIM_MGEO, 
           projeGBId = p.P_YURUTEN_GB, 
           projeDirektorlukId = p.P_YURUTEN_D, 
           projeMudurlukId = p.P_YURUTEN_M, 
           projeTuru = pt.UZUN_AD, 
           projeTuruId = p.PROJE_TURU, 

           projeDirektorluk = dir.AD, 
           projeGB = gb.AD, 
           projeMudurluk = mud.AD, 

           yonetici = yon.AD + " " + yon.SOYAD, 
           sektorIci = p.SI_SA, 

           anaYukleniciSektor = p.ANA_YUKLENICI_S, 
           altYukleniciSektor = p.ALT_YUKLENICI_S, //Bu kısım arayüzde eşleştirilecek 
           projeKisaTanim = p.PROJE_KISA_TANIMI, 
           sozlesmeBaslangicTarihi = p.SOZLESME_BASLANGIC_TARIHI, 
           sozlesmeBitisGH = p.SOZLESME_BITIS_TARIHI_GH, 
           sozlesmeBitisGD = p.SOZLESME_BITIS_TARIHI_GD, 
           sozlesmeImzaTarihi = p.SOZLESME_IMZA_TARIHI, 
           aliciKurum = p.ALICI_KURUM, 
           ihtiyacSahibiKurum = p.IHTIYAC_SAHIBI_KURUM, 
           anaYukleniciKurum = p.ANA_YUKLENICI_KURUM, 
           kategori = kat.Aciklama, 
           faz = f.Aciklama, 
           ur_sp = p.UR_SP, 
           ekleyen = p.Ekleyen 

          }; 

      return projeOzet; 
     } 


    } 

我的控制器的對象是;

public class ProjeOzetController : ApiController 
    { 
     private ProjeOzet_Repository projeOzetRepository; 

     public ProjeOzetController() 
     { 
      this.projeOzetRepository = new ProjeOzet_Repository(); 
     } 
     public IQueryable<ProjeOzet> Get() 
     { 
      return projeOzetRepository.GetProjeOzets(); 

     } 
    } 

我的對象模型是;

public class ProjeOzet 
    { 
     public int Id { get; set; } 

     public bool gizli { get; set; } 
     public bool raporlanacak { get; set; } 

     public string projeNo { get; set; } 
     public string projeTanim { get; set; } 
     public string projeTuru { get; set; } 

     public int? projeTuruId { get; set; } 
     public int? projeGBId { get; set; } 
     public int? projeDirektorlukId { get; set; } 
     public int? projeMudurlukId { get; set; } 

     public string projeGB { get; set; } 
     public string projeDirektorluk { get; set; } 
     public string projeMudurluk { get; set; } 

     public string yonetici { get; set; } 
     public int? sektorIci { get; set; } 
     public int? anaYukleniciSektor { get; set; } 
     public string altYukleniciSektor { get; set; } 
     public string projeKisaTanim { get; set; } 
     public DateTime? sozlesmeImzaTarihi { get; set; } 
     public DateTime? sozlesmeBaslangicTarihi { get; set; } 
     public DateTime? sozlesmeBitisGH { get; set; } 
     public DateTime? sozlesmeBitisGD { get; set; } 
     public string aliciKurum { get; set; } 
     public string ihtiyacSahibiKurum { get; set; } 
     public string anaYukleniciKurum { get; set; } 
     public string kategori { get; set; } 
     public string faz { get; set; } 
     public int? ur_sp { get; set; } 
     public int? ekleyen { get; set; } 

    } 

例如,kategori變量有一些問題。我有另一個表綁定到這個變量,並有兩列; ID(int)和說明(nvarchar)。我將kategori的ID值保存到我的主表(它位於PROJE_OZET的P_KATEGORI列下且可爲空)。我想顯示Explanation這是有限的ID。對於我的主表(PROJE_OZET)中的一行,如果P_KATEGORI有一個值,則沒有問題。但是,如果此列爲該行的null,那麼當我調用GET方法時,我會得到一個空的JSON對象,儘管其他列有值。

我該如何解決這個問題?

+0

利用這個,看看有什麼是你的SQL https://hibernatingrhinos.com/products/EFProf – LiverpoolOwen

+0

是否'projeOzetRepository.GetProjeOzets()'實際上返回任何問題?請使用調試進行檢查。另外,我沒有看到'[HttpGet]'屬性超出你的行爲。 – Andrei

+0

我也會'返回projeOzet.ToList();'只是爲了安全一邊 –

回答

1

最有可能的是,您需要執行左連接而不是內連接。下面是如何做一個例子:

var query = from person in people 
        join pet in pets on person equals pet.Owner into gj 
        from subpet in gj.DefaultIfEmpty(); 
+0

我需要的是左連接。這對我幫助很大。 –