2010-08-25 58 views
1

我正在使用SQL Reporting Services來創建WCF Web服務。具有實體框架的Reporting Services

我的查詢是:

<Query> 
<Method Name="GetADTHistory" Namespace="http://tempuri.org/"> 
<Parameters> 
     <Parameter Name="personId"><DefaultValue>7885323F-DE8D-47E5-907D-2991C838FF3E</DefaultValue></Parameter> 
    </Parameters> 
</Method> 
<SoapAction> 
http://tempuri.org/IResidentServiceFrontEnd/GetADTHistory 
</SoapAction> 
</Query> 

我實現

public List<ResidentDataTypes.Person> GetADTHistory(Guid personId) 
     { 
      using (ResidentDataTypes.MyEntities entity = new ResidentDataTypes.MyEntities()) 
      { 
       var person = (from a in entity.People.Include("ResidentAdts") 
           where a.PersonId == personId 
           select a); 

       if (person.Count() > 0) 
       { 
        return person.ToList(); 
       } 
       else 
       { 
        return new List<Person>(); 
       } 

      } 
     } 

如果有2個或更多ADT記錄這工作得很好。報告服務正確地看到數據庫中的所有字段。但是,如果只有1個ADT記錄報告服務可以看到「人員」列,但沒有ADT記錄。有任何想法嗎?

回答

0

它看起來像你有急切/懶惰加載問題。我建議你使用linqpad執行和測試查詢,以檢查它是否真的包含單條記錄中的ResidentAdts。

我還建議你檢查這個線程:Linq to Entities Include Method Not Loading

添加「的LINQ」標記你的問題也有幫助。

+0

我已經通過SQL分析器驗證了ADT的加載,並且在函數返回之前我可以在Visual Studio的監視窗口中看到對象。 – Biggle10 2010-08-26 13:49:10

+0

然後,它可能與您的報告定義以及如何在報告結構中使用ADT記錄有關。我不認爲這是一個序列化的問題,但它也可能值得檢查數據是否與調用服務的自定義客戶端正確序列化。如果未加密,您也可以使用Fiddler這樣的工具來檢查從服務器收到的數據。 – orka 2010-08-26 14:12:58

+0

當我使用WCF Test Client時,它掛在這個方法上。它適用於同一服務上的其他方法。我會考慮使用Fiddler。 – Biggle10 2010-08-26 21:31:00