Параметр должен быть типом сущности, предоставляемым DomainService?

Попытка реализовать службу домена в приложении SL и получение следующей ошибки:

Параметр spFolderCreate метода домена "CreateSharePointFolder" должен быть типом сущности, предоставляемым 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; }
    }
}

Так я что-то упустил здесь, чтобы все это работало?

1 ответ

Решение

Может случиться так, что инфраструктура выведет намеченную операцию, потому что у вас есть слово "Создать", перед которым стоит имя функции (CreateSharePointFolder). Подробности этого поведения можно найти здесь

Хотя это нормально для DomainServices и EntityFramework, следуя информации в этой статье, можно сделать вывод, что методы, начинающие "Удалить", будут выполнять удаление объекта, поэтому должны принять объект в качестве параметра. То же самое верно для методов с префиксом "Создать" или "Вставить". Только методы "Get" или "Select" могут принимать не-сущностные параметры, что позволяет передавать числовой идентификатор (например) в метод "Get".

Попробуйте временно изменить имя метода на "BlahSharePointFolder", чтобы увидеть, не является ли это условием вывода, которое вызывает вашу проблему.

Кроме того, поскольку для вашего SharePointFolderCreate DC метаданные не определены, вам может потребоваться декорировать класс (в дополнение к атрибуту [DataContract]) с атрибутом [MetadataType]. Вы увидите, как это реализовать, если использовали мастер DomainServiceClass и указали на модель EF. Внизу есть флажок для генерации метаданных. Где-то в вашем проекте решения.Web вы должны найти файл domainservice.metadata.cs. В этом файле вы найдете примеры использования атрибута [MetadataType].

Чтобы служба RIA WCF корректно работала с вашими собственными методами, необходимо убедиться, что у всех сущностей, существующих в списке параметров, есть хотя бы один член с атрибутом [Key], определенный в их классе метаданных, и что сущность возвращается где-то в ваш DomainService в методе "Get".

НТН

подветренный

Другие вопросы по тегам