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);

デバッグすると、作成した 2 つの複合型 (noCts は 2) がありますが、サーバー側で SubTypes を追加したにもかかわらず、反復ごとに noSts は 0 です。

何か案は?

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 に答える