Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight RIA服务SP2函数复杂类型在对象上下文中不可见_Silverlight_Entity Framework 4_Service_Ria - Fatal编程技术网

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 {


  • 定义域服务方法以返回用于填充Silverlight网格或任何其他数据消耗控件的对象/实体集合


  • 这就是我们需要做的一切

  • 谢谢!然后我得到了关于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)
        {
    
        }
    }