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