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 参数必须是DomainService公开的实体类型?_Silverlight_Ria - Fatal编程技术网

Silverlight 参数必须是DomainService公开的实体类型?

Silverlight 参数必须是DomainService公开的实体类型?,silverlight,ria,Silverlight,Ria,试图在SL应用程序中实现域服务,但出现以下错误: 域方法“CreateSharePointFolder”的参数“spFolderCreate”必须是DomainService公开的实体类型 [EnableClientAccess()] public class FileUploadService : DomainService { public void CreateSharePointFolder(SharePointFolderCreate spFolderCreate)

试图在SL应用程序中实现域服务,但出现以下错误:

域方法“CreateSharePointFolder”的参数“spFolderCreate”必须是DomainService公开的实体类型

 [EnableClientAccess()]
public class FileUploadService : DomainService
{
    public void CreateSharePointFolder(SharePointFolderCreate spFolderCreate)
    {
        SharePointFolder spf = new SharePointFolder();
            spf.CreateFolder_ClientOM(spFolderCreate.listName, spFolderCreate.fileName);
    }

 [OperationContract]
    void CreateSharePointFolder(SharePointFolderCreate spFolderCreate);

[DataContract]
public class SharePointFolderCreate
{
    private string m_listName;
    private string m_fileName;

    [DataMember]
    public string listName
    {
        get { return m_listName; }
        set { m_listName = value; }
    }

    [DataMember]
    public string fileName
    {
        get { return m_fileName; }
        set { m_fileName = value; }
    }
}

那么,我是否遗漏了一些简单的方法来实现这一切呢?

可能是框架在推断预期的操作,因为函数名(CreateSharePointFolder)的前缀是“创建”。有关这种行为的详细信息,请参见

尽管对于DomainServices和EntityFramework来说这一切都很好,但是根据那篇文章中的信息,可以推断以“Delete”开头的方法将执行实体的删除,因此必须接受实体作为参数。“Create”或“Insert”前缀方法也是如此。只有“Get”或“Select”方法可以接受非实体参数,从而可以将数字id(例如)传递给“Get”方法

尝试将方法名称临时更改为“BlahSharePointFolder”,以查看是否是这种推断惯例导致了您的问题

此外,由于没有为SharePointFolderCreate DC定义元数据,您可能需要使用[MetadataType]属性来修饰类(除了[DataContract]属性之外)。如果使用DomainServiceClass向导并指向EF模型,您将看到如何实现此功能。底部有一个用于生成元数据的复选框。在solution.Web项目的某个地方,您应该可以找到domainservice.metadata.cs文件。在此文件中,您将找到如何使用[MetadataType]属性的示例

为了使RIA WCF服务能够正确使用您自己的方法,您需要确保参数列表中存在的所有实体都至少有一个成员具有在其元数据类中定义的[Key]属性,并且该实体以“Get”方法返回到DomainService上的某个位置


Lee

可能是因为函数名(CreateSharePointFolder)前面有“创建”一词,所以框架正在推断预期的操作。有关这种行为的详细信息,请参见

尽管对于DomainServices和EntityFramework来说这一切都很好,但是根据那篇文章中的信息,可以推断以“Delete”开头的方法将执行实体的删除,因此必须接受实体作为参数。“Create”或“Insert”前缀方法也是如此。只有“Get”或“Select”方法可以接受非实体参数,从而可以将数字id(例如)传递给“Get”方法

尝试将方法名称临时更改为“BlahSharePointFolder”,以查看是否是这种推断惯例导致了您的问题

此外,由于没有为SharePointFolderCreate DC定义元数据,您可能需要使用[MetadataType]属性来修饰类(除了[DataContract]属性之外)。如果使用DomainServiceClass向导并指向EF模型,您将看到如何实现此功能。底部有一个用于生成元数据的复选框。在solution.Web项目的某个地方,您应该可以找到domainservice.metadata.cs文件。在此文件中,您将找到如何使用[MetadataType]属性的示例

为了使RIA WCF服务能够正确使用您自己的方法,您需要确保参数列表中存在的所有实体都至少有一个成员具有在其元数据类中定义的[Key]属性,并且该实体以“Get”方法返回到DomainService上的某个位置


Lee想用[Key]属性和元数据类来更新它,这导致了我的问题。在经历了太多的痛苦之后,我终于找到了答案。想要用它来更新它的是[Key]属性和元数据类,这导致了我的问题。在经历了太多的痛苦之后,终于明白了。