WebAPI ODATA サービス ($expand および $select サポートに 5.0.0-rc1 を使用) を構成しましたが、ナビゲーション プロパティ以外はすべて正常に動作しているようです。
メタデータには、私のナビゲーション プロパティ (Mandate の OpenPositions) が含まれています。
次に、私の簡単なクエリは次のとおりです。
function search() {
var query = breeze.EntityQuery.from("Mandates").expand("OpenPositions").inlineCount();
return manager.executeQuery(query.using(service)).then(function (result) {
logger.info(result);
}).fail(function (error) {
logger.error(error);
});
}
WebAPI コントローラー:
[Queryable(AllowedQueryOptions= AllowedQueryOptions.All)]
public override IQueryable<Mandate> Get()
{
return new List<Mandate>() { new Mandate() {
Id = 1,
PolicyNumber = "350000000",
OpenPositions = new List<OpenPosition>(){
new OpenPosition(){ Id = 1, Amount = 2300, Mandate_Id = 1 },
new OpenPosition(){ Id = 2, Amount = 2100, Mandate_Id = 1 }
}},
new Mandate() {
Id = 2,
PolicyNumber = "240000000" ,
OpenPositions = new List<OpenPosition>(){
new OpenPosition(){ Id = 3, Amount = 2500, Mandate_Id = 2 },
new OpenPosition(){ Id = 2, Amount = 2100, Mandate_Id = 2}
}
} }.AsQueryable<Mandate>();
}
壮観なものは何もありません。しかし、Mandate エンティティは結果セットに戻ってきますが、OpenPositions コレクションはありません。
.select("OpenPositions")
テストとして、簡単なクエリに追加すると、エラーが発生します。
unable to locate property: OpenPositions on entityType: Mandate:#WebAPINoBreeze.Models
なぜそれができますか?
[編集] query.entityType.NavigationProperties は空の配列なので、おそらく手がかりです...そよ風がメタデータからナビゲーションプロパティを構築できなかったようです。
[編集]
外部キーが追加されました。問題はまだあります:
public class Mandate
{
public int Id { get; set; }
public string PolicyNumber { get; set; }
public EStatus Status { get; set; }
public virtual List<OpenPosition> OpenPositions { get; set; }
}
public class OpenPosition
{
public int Id { get; set; }
public decimal Amount { get; set; }
[ForeignKey("Mandate")]
public int Mandate_Id { get; set; }
}
**[編集] **
何らかの理由で [ForeignKey("Mandate")] 属性がコンパイル時に削除されました (モデル クラスが生成されたためだと思います。回避策が見つかり、メタデータには OpenPositions で Mandate する外部キー MandateId が含まれるようになりました。