经过广泛的Googleing之后,我仍然对着墙壁猛撞我的头。使用Silverlight 4 WCF RIA域名服务的复杂类型
我想获得一个域服务来返回客户端的对象列表。我的对象是
[DataContract]
public class MyComplexType {
[Key]
[DataMember]
public int Id { get; set; }
[DataMember]
public string SomeString { get; set; }
[DataMember]
public IEnumerable<MySubType> SubTypes { get; set; }
}
[DataContract]
public class MySubType {
[Key]
[DataMember]
public int Id { get; set; }
[DataMember]
public string AnotherString { get; set; }
}
域名服务具有以下
[Query]
[Invoke]
public IQueryable<MyComplexType> GetMyComplexTypes() {
/* return stuff */
}
但在客户端的MyComplexType对象不具有亚型财产,我尝试添加属性:
[DataMember]
public int ComplexTypeId { get; set; }
...到MySubType,属性:
[Association("SubType_FK", "Id", "ComplexTypeId")]
...到MyComplexType中的SubTypes属性。
但它仍不会将SubTypes属性推送到客户端。 我有另一个对象(原理相同,但有真实代码),其中SubTypes等价物在客户端POCO上,但它总是空的(无论从服务器返回什么)。
我觉得我必须在这里错过一些东西,这肯定不应该那么困难?任何帮助或解释或指导一个有用的资源,将不胜感激。
UPDATE: 我发现如果我添加下面的查询添加到域服务:
public IQueryable<MySubType> GetMySubTypes() {
throw new NotImplementedException();
}
我现在可以从客户端访问MyComplexType.SubType属性,但是当我测试它用下面的代码...
_Context.Load(_Context.GetMyComplexTypesQuery(),
r => {
myComplexTypes = r.Entities;
var noCts = myComplexTypes.Count();
foreach (var ct in myComplexTypes) {
var noSts = ct.SubTypes.Count();
}
}, null);
我调试它,有两个复合类型,我创建(所以noCts是2),但每次迭代noSts为0,尽管我的服务器 - 添加亚型SID即
任何想法?
您是否尝试过比您的子类型的IEnumerable更具体的东西?例如尝试一个'列表'并查看它是否生成客户端代理。客户端代理不会生成为服务器POCO中指定的确切类型。 –
2012-07-05 15:30:29
与列表相同:-( –
Ben
2012-07-05 15:39:39
首先:丢失'DataMember'属性,因为Ria Services不需要它们。第二:您发送的项目有多大? - >检查web.config以获取最大值第三:你是否返回'IQueryable'并在触发查询之前使用'.ToList()'或类似的方法处理DataContext? –
Silvermind
2012-07-05 22:52:35