大規模なグーグル検索の後、私はまだこれで壁に頭をぶつけています。
オブジェクトのリストをクライアント側に返すドメイン サービスを取得しようとしています。私のオブジェクトは
[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 です。
何か案は?