2017-03-17 47 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

我需要的是左连接。这对我帮助很大。 –