Привет, ты! Первый вопрос по StackOverflow! : -)
Итак, вот сценарий: мы работаем над веб-приложением с Silverlight 4 и используем WCF RIA Services 1.0 SP1 Beta для веб-службы. У меня есть сущности в Entity Framework Designer, но я использую слегка модифицированный шаблон ADO.NET C # POCO Entity Generator для генерации классов.
Что я хотел бы сделать, так это создать метод внутри доменной службы со следующей подписью:
[EnableClientAccess]
public class ResultService : DomainService
{
[Invoke]
public SerializableResult CalculateResult(EntityOne e1, EntityTwo e2);
}
Я возвращаю и EntityOne, и EntityTwo клиенту через запросы в других службах, например:
[EnableClientAccess]
public class EntityOneService : DomainService
{
public IQueryable<EntityOne> GetEntityOnes();
}
[EnableClientAccess]
public class EntityOneService : DomainService
{
public IQueryable<EntityTwo> GetEntityTwos();
}
Эти классы успешно генерируются в проекте Silverlight. SerializableResult не имеет ключа , а не .
Когда я пытаюсь скомпилировать, я получаю следующую ошибку: «Операция с именем« CalculateResult »не соответствует требуемой подписи. Типы параметров должны быть сущностью или сложным типом, коллекцией сложных типов или одним из предопределенных Сериализуемые типы. "
В моем исследовании самая полезная информация, которую я нашел, была в комментариях к этой записи Джеффа Хэндли .
Примечательно, Петр спросил в комментарии:
Я получаю ошибку компиляции «не соответствует требуемой подписи ...», если у моего сложного объекта есть атрибут [Key]. Когда я удаляю этот атрибут, я могу использовать объект в качестве параметра для операции Invoke.
Ответ Джеффа:
Это по замыслу. Сложные объекты не могут иметь ключевых свойств. Если у вас есть ключ, класс рассматривается как сущность.
Похоже, что дальнейшие попытки заставить мой метод работать будут тщетны. Однако мне было интересно, сталкивался ли кто-нибудь еще с этой проблемой и что они сделали для ее решения.
Большое спасибо!