Silverlight RIA服务SP2函数复杂类型在对象上下文中不可见
我正在努力从服务层返回复杂类型。它似乎无法从我的对象上下文访问 这是服务层中的查询。一切都很好Silverlight RIA服务SP2函数复杂类型在对象上下文中不可见,silverlight,entity-framework-4,service,ria,Silverlight,Entity Framework 4,Service,Ria,我正在努力从服务层返回复杂类型。它似乎无法从我的对象上下文访问 这是服务层中的查询。一切都很好 public IQueryable<USP_GetPostsByThreadID_Result> uspGetPostsByThreadID(int ThreadID) { return this.ObjectContext.USP_GetPostsByThreadID(ThreadID).AsQueryable(); } public IQu
public IQueryable<USP_GetPostsByThreadID_Result> uspGetPostsByThreadID(int ThreadID)
{
return this.ObjectContext.USP_GetPostsByThreadID(ThreadID).AsQueryable();
}
public IQueryable uspGetPostsByThreadID(int-ThreadID)
{
返回此.ObjectContext.USP_GetPostsByThreadID(ThreadID).AsQueryable();
}
当我尝试从我的客户那里调用它时,ForumContext没有看到它。我检查了客户端生成的文件,没有生成任何类似的文件。救命啊 它必须是实体的一部分。复杂类型本身无法返回方法名称可能不符合查询的预期约定。请尝试以下一项或两项:
- 添加
属性[Query]
- 将该方法重命名为
getuspostsbythreadid
[System.ServiceModel.DomainServices.Server.Query]
public IQueryable<USP_GetPostsByThreadID_Result> GetUspPostsByThreadID(int ThreadID)
{
return this.ObjectContext.USP_GetPostsByThreadID(ThreadID).AsQueryable();
}
[System.ServiceModel.DomainServices.Server.Query]
公共IQueryable GetUspPostsByThreadID(int-ThreadID)
{
返回此.ObjectContext.USP_GetPostsByThreadID(ThreadID).AsQueryable();
}
存储过程从多个表返回数据是很常见的。返回类型不适合任何实体类型(表)。因此,如果我们将复杂类型定义为存储过程调用的对象的返回集合,它将成为开发人员非常强大的工具
按照这些步骤,我成功地在一个示例AdventureWorks数据库上实现了复杂类型的配置。
1.参考图片,确保已完成存储过程和函数导入。
2.将域名服务名称添加为AdventureDomainService。
3.现在是时候定义RIA服务框架来将我的复杂类型识别为实体类型了。要做到这一点,我们需要识别一个[Key]DataAnnotation。实体类型为应用程序的数据模型提供数据结构,根据设计,每个实体类型都需要定义一个唯一的实体键。我们可以在元数据类文件AdventureDomainService.metadata.cs中定义一个属性或一组属性的键
首先定义类,然后添加MetadatatypeAttribute,如下所示:
[MetadataTypeAttribute(typeof(CTEmployeeManagers.CTEmployeeManagersMetadata))] 公共部分类CTemployeeManager {
谢谢!然后我得到了关于no key的编译错误,我将其添加到元数据类中,现在我可以在客户机中看到该方法。
internal sealed class CTEmployeeManagersMetadata
{
private CTEmployeeManagersMetadata() { }
[Key]
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int ManagerID { get; set; }
public string ManagerFirstName { get; set; }
public string ManagerLastName { get; set; }
}
}
public IQueryable<CTEmployeeManagers> GetEmployeeManagers(int empId)
{
return this.ObjectContext.GetEmployeeManagers(empId).AsQueryable();
}
// Executes when the user navigates to this page.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
}