RIA DomainService不使用DataContracts生成客户端代码

时间:2010-09-21 12:38:03

标签: serialization ria 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; }
}

两个类都在同一名称空间中。

问题:为什么不在客户端上创建SummaryDataSet的SummaryGroup属性,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

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。