当我使用expand时,使用web api的breeze js不返回子实体

时间:2013-06-13 17:05:10

标签: asp.net-web-api breeze

我正在使用带有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

结果中有车辆。

以下是我回来的片段:

[ { “$ id”:“1”, “$ type”:“Eclipse.Model.Policy,Eclipse.Model”, “Id”:1, “PolicyNumber”:“PHHOAP00”, “车辆”: [ { “$ id”:“2”, “$ type”:“Eclipse.Model.Vehicle,Eclipse.Model”, “Id”:1, “制造商”:“ac”, “模特”:“在”, “ModelYear”:2006年, “政策”:{ “$ ref”:“1” },...

编辑: 我不确定它是否相关但是当我在控制台中键入以下内容时,我得到了空白数组。

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

2 个答案:

答案 0 :(得分:1)

玛勒基, 您是否尝试过将ForeignKey添加到车辆策略中? Breeze将需要FK来解决实体之间的导航,这很可能是造成问题的原因。

答案 1 :(得分:0)

恢复到1.3.4版本的breeze.debug.js修复了这个问题。

在我的情况下,似乎在1.3.5 OData $ expand中没有正确映射到data.results。