我正在使用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属性,我该怎么做才能解决这个问题?
答案 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。