WCF RIA Service实体类的自定义复杂类型属性在客户端不可见

在WCF RIA Service实体类中如果加了自定义的复杂类型,例如下面的Children属性,就是一个实体自己的一个列表:

WCF RIA Service实体类的自定义复杂类型属性在客户端不可见_第1张图片

如果有个DomainService返回这个StudentResult:

WCF RIA Service实体类的自定义复杂类型属性在客户端不可见_第2张图片

那么在Silverlight客户端,你会发现实体StudentResult的Children属性不可见。

原因和解决方法

原因是WCF RIA Service是对WCFService的一个封装,对需要用到的实体用DataContract标记并序列化,并且有一个自动客户端代码生成的机制。在CodeGeneration的过程中,并不是每一个属性都会被自动生成,除非必要。解决办法是你手动指定CodeGeneration,比如[Include], [Associate]等服务器端标记,标记你需要这个属性,标记这个属性和其它实体的联系(外键关联比如)。

WCF RIA Service实体类的自定义复杂类型属性在客户端不可见_第3张图片

这样在Silverlight客户端就会自动获得实体的复杂对象。此处使用了[Include], [Associate]标记指定了属性需要CodeGeneration。

继承的情况

继承的情况下,也是没有问题的,看一个复杂一点的继承的代码:

WCF RIA Service实体类的自定义复杂类型属性在客户端不可见_第4张图片

 

继承并返回基类的情况

上面的继承例子是在DomainService里面返回继承类,如果是返回基类(抽象类或者接口)到客户端的话,WCF序列化情况要复杂一些。需要用WCF的已知类型(Known Type)标记,具体请看MSDN和园友博文。有关WCF RIA Service的继承数据模型,完整请察看MSDN这篇文章《Inheritance in Data Models》

你可能感兴趣的:(service)