2010-08-25 81 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