0

BreezeJs 1.3.5 で WebAPI V4.0.30506.0 (これは安定版である必要があります) を使用していますが、何らかの理由で expand キーワードを使用すると子エンティティが取得されません。子エンティティを取得するにはどうすればよいですか?

これが私のデータモデルの縮小版です。

public class Policy
{
    public int Id { get; set; }
    public string PolicyNumber { get; set; }
    public ICollection<Vehicle> Vehicles { get; set; }
}

public class Vehicle
{
    public int Id { get; set; }
    public string Manufacturer { get; set; }
    public string Model { get; set; }
    public int ModelYear { get; set; }
    public virtual Policy Policy { get; set; }
}

私の取得は次のようになります。

    var getPolicies = function (policyObservable, getFromServer) {
        if (!getFromServer) {
            var pLocal = getLocal('Policies', 'policyNumber');
            if (pLocal.length > 0 ){
            policyObservable(pLocal);
            return Q.resolve();
            }
        }

         var query = EntityQuery.from('Policies')
            .expand("Vehicles");

        return manager.executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);

        // handle the ajax callback
        function querySucceeded(data) {
            if (policyObservable) {
        // I pause here in Chrome
                policyObservable(data.results);
            }
            log('retrieved policy!', data, true);
        }
    };

Chrome で querySucceeded の data.results を見ると、一連のポリシーが表示されますが、子車両はありません。ネットワークタブをチェックインすると、次の呼び出しが表示されます。

http://localhost/breeze/breeze/Policies?$expand=Vehicles

結果には Vehicles があります。

これが私が返すもののスニペットです:

[ { "$id": "1", "$type": "Eclipse.Model.Policy, Eclipse.Model", "Id": 1, "PolicyNumber": "PHHOAP00", "Vehicles": [ { "$ id": "2", "$type": "Eclipse.Model.Vehicle, Eclipse.Model", "Id": 1, "Manufacturer": "ac,", "Model": "In", "ModelYear" : 2006、「ポリシー」: { "$ref": "1" },...

編集:関連しているかどうかはわかりませんが、コンソールに次のように入力すると、空の配列が表示されます。

console.log(data.results[0].entityAspect._entityKey.entityType.navigationProperties)
console.log(data.results[0].entityAspect._entityKey.entityType.foreignKeyProperties)
4

2 に答える 2

1

マレキ、Vehicle の Policy に ForeignKey を追加してみましたか? Breeze は、エンティティ間のナビゲーションを解決するために FK を必要とし、これが問題の原因である可能性が最も高いです。

于 2013-06-13T23:04:58.410 に答える
0

Breeze.debug.js を 1.3.4 バージョンに戻すと、問題が修正されました。

私の場合、1.3.5 OData では $expand が data.results に適切にマップされていないようです。

于 2013-06-14T03:18:27.187 に答える