RIA DomainService не генерирует клиентский код с использованием DataContracts

Я работаю над приложением Silverlight 4.0 и использую службы RIA. Я создал класс на стороне сервера, к которому применены атрибуты DataContract и DataMember.

DomainService предоставляет этот класс как результат запроса и, таким образом, генерирует для него код на клиенте. Но почему-то он не генерирует код для всех свойств класса. Примитивные свойства типа guid, string, int, bool и т. д. генерируются просто отлично, но если у меня есть свойство моего собственного сложного типа, это свойство не создается на клиенте.

Вот класс, о котором идет речь:

    [DataContract]
    [KnownType(typeof(SummaryGroup))]
    public class SummaryDataSet
    {
        public SummaryDataSet()
        {

        }

        [KeyAttribute]
        [DataMember]
        public Guid Guid { get; set; }

        [DataMember]
        public SummaryGroup SummaryGroup { get; set; }

    }

Свойство Guid создается на клиенте просто отлично. Свойство SummaryGroup не создается на клиенте. Вот код для SummaryGroup:

[DataContract]
public class SummaryGroup
{
    public SummaryGroup()
    {
    }

    [KeyAttribute]
    [DataMember]
    public Guid Guid { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int Sequence { get; set; }
}

Оба класса находятся в одном пространстве имен.

Вопрос: почему на клиенте не создается свойство SummaryGroup для SummaryDataSet и что делать, чтобы это исправить?


person JeroenNL    schedule 21.09.2010    source источник


Ответы (1)


WCF RIA не может обрабатывать сложные типы, но вы можете попробовать следующее:

    [DataContract]
    [KnownType(typeof(SummaryDataSet))]
    public class SummaryDataSet
    {
        public SummaryDataSet()
        { }

        [KeyAttribute]
        [DataMember]
        public Guid Guid { get; set; }

        [DataMember]
        [Association("SummarySet_SummaryGrp_FK", "Guid", "Guid")]
        public SummaryGroup SummaryGroup { get; set; }

    }

Это дает RIA информацию для подключения от SummaryDataSet к SummaryGroup.

Это предполагает, что вы можете запросить как SummaryDataSet, так и SummaryGroup из серверной службы.

person Rus    schedule 22.09.2010
comment
Да, использование ассоциаций - это действительно правильный путь - теперь у меня все работает. Связанный с этим вопрос: никогда раньше не слышал термин DTO (объект передачи данных), будет ли SummaryDataSet одним из них? - person JeroenNL; 22.09.2010
comment
Я думаю, что такого рода вопросы зависят от вашей точки зрения. Шаблон DTO определяется здесь en.wikipedia.org/wiki/Data_transfer_object. Я бы сказал, что SummaryDataSet является примером подхода WCF RIA к DTO. В моих проектах RIA я часто создаю оболочку для объектов такого типа, чтобы сделать их более приемлемыми для моего подхода MVVM. Надеюсь это поможет. - person Rus; 22.09.2010