经过广泛的谷歌搜索后,我仍然抨击我的头撞墙。
我正在尝试获取域服务以将对象列表返回给客户端。我的对象是
[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对象没有SubTypes属性,我尝试添加属性:
[DataMember]
public int ComplexTypeId { get; set; }
...到MySubType,属性:
[Association("SubType_FK", "Id", "ComplexTypeId")]
...到MyComplexType中的SubTypes属性。
但它仍然没有将SubTypes属性推送到客户端。 我有另一个对象(相同的原则,但有实际代码),其中SubTypes等价物在客户端POCO上,但它总是空的(无论从服务器返回什么)。
我觉得我必须在这里遗漏一些东西,这当然不应该这么难吗?任何帮助或解释或指导有用的资源将不胜感激。
更新: 我发现如果我添加以下查询添加到域服务:
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,尽管我在服务器端添加了SubTypes。
有什么想法吗?
答案 0 :(得分:0)
您可能只需要添加[ComplexType]
属性:
using System.ComponentModel.DataAnnotations;
[ComplexType]
public class MyComplexType {
public int Id { get; set; }
public string SomeString { get; set; }
public IEnumerable<MySubType> SubTypes { get; set; }
}
[ComplexType]
public class MySubType {
public int Id { get; set; }
public string AnotherString { get; set; }
}
[DataContract]
和[DataMember]
属性是可选的。它们由WCF RIA自动推断。