Могу ли я добавить сериализуемые свойства в мои объекты с помощью RIA Services? - PullRequest
1 голос
/ 09 ноября 2011

Можно ли добавить сериализуемое свойство в Entity или ComplexType с помощью RIA Services?Или я могу создать DTO, который содержит EntityObject, используя RIA?Если это невозможно, то какой обходной путь?

Я видел Как расширить сущность при использовании служб RIA с Silverlight? , которая связана с добавлением свойства к сущности, но этосвойство без данных, которое просто оборачивает существующие свойства.Другими словами, он не содержит никаких новых данных.Я прошу прощения за длину этого вопроса.

У меня есть два результата (один EntityObject из запроса таблицы и один ComplexObject из сохраненного процесса) в моем слое данных, который я хочу вернуть вместе ив одном сервисном звонке.Они неразрывно связаны с точки зрения представления (один не имеет смысла без другого), и было бы неприлично делать два вызова, а затем присоединять их к клиентской стороне.Но у меня проблемы с получением двух объектов в одном результате.


Сначала я попытался расширить ComplexObject, добавив свойство для Entity

public partial class MyProcResult
{        
    [DataMember]
    public MyEntity Foo { get; set; }
}

и заполнив его в операции службы домена.Свойство устанавливается на стороне сервера, но оно не сериализуется - фактически клиент даже не видит свойство!

После некоторого чтения становится очевидным, что я могу сообщить клиенту о свойствах, назвав мой частичный класс MyProcResult.shared.cs - и теперь клиент знает, что свойство существует, но оно все еще не сериализовано.

Поэтому я предполагаю, что служба RIA не раскрывает очень подробный контракт на обслуживание, и попробую что-то еще.Моя следующая попытка - создать DTO, в который я включу два моих объекта - должно работать, верно?

[DataContract]
public class MyContainer
{
    [DataMember]
    public MyProcResult Bar { get; set; }
    [DataMember]
    public MyEntity Foo { get; set; }
}

Опять же, все это заполняется до сериализации.На этот раз клиент не может видеть свойство MyEntity .Он считает, что MyContainer имеет только свойство MyProcResult.Сгенерированный код на стороне клиента не содержит другого свойства!

Что происходит?Что особенного в этих сущностях, которое мешает им сериализоваться, когда они помечены [DataMember] или включены в DTO?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Для сложных агенств вы должны задать для них отношения (например, внешний ключ), в противном случае невозможно выставить клиенту сложный клиник.Например:

В этом примере коллекция объектов категории переносится в предыдущий объект Product:

public partial class ProductWrapper 
{
     [Key]     
     public Guid Id { get; set; }     
     public string Name { get; set; }

     [Include]
     [Association("FK_ProductsWrapper", "Id", "CategoryId")]     
     public Category[] CategoryList { get; set; } 
}
1 голос
/ 09 ноября 2011

Когда свойство имеет тип EntityObject, только если оно имеет общую ассоциацию и является свойством навигации, оно будет представлено клиенту. Поскольку объекты могут быть получены только с помощью запроса, отслеживание изменений должно работать правильно, любое свойство, полученное из объекта объекта, должно иметь общую ассоциацию.

...