2

经过广泛的谷歌搜索后,我仍然对此感到头疼。

我正在尝试让域服务将对象列表返回到客户端。我的对象是

[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。

有任何想法吗?

4

1 回答 1

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 自动推断。

于 2012-07-06T14:52:19.467 回答