繁体   English   中英

Silverlight 4 WCF RIA域服务的复杂类型

[英]Complex types with Silverlight 4 WCF RIA Domain Service

经过广泛的Google搜索后,我仍然在此墙上砸头。

我正在尝试获取域服务以将对象列表返回给客户端。 我的对象是

[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; }

...到M​​ySubType,以及属性:

[Association("SubType_FK", "Id", "ComplexTypeId")]

...到M​​yComplexType中的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,尽管我在服务器端添加了SubType。

有任何想法吗?

您可能只需要添加[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自动推断。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM