Breeze不会填充集合导航属性

时间:2014-12-07 00:30:46

标签: javascript breeze entity-framework-6

我有一个实体框架6,数据库优先,我在BreezeController后面查询的模型。我的问题是当我向控制器查询对象时,breeze不会填充导航集合属性。它是定义的,但它是空的。

这是服务器端(生成的)POCO和Breeze控制器方法:

public partial class Inventory
{   
    public int Id { get; set; }
    ...
    public virtual ICollection<InstrumentReading> InstrumentReadings { get; set; }
}

public partial class InstrumentReading
{
    public int Id { get; set; }
    ...
    public Nullable<int> InventoryId { get; set; }
}

[BreezeController]
public class BreezeController : ApiController
{
    ....
    [HttpGet]
    public IQueryable<Inventory> Inventories([FromUri] int id)
    {
        var data = _repository.Inventories(id);
        return data;
    }
}

这就是我在javascript中查询它的方式:

        return EntityQuery.from('Inventories')
            .expand('InstrumentReadings') 
            .withParameters({ id: id })
            .toType('Inventory').using(self.manager)
            .execute().then(querySucceeded, self._queryFailed);

        function querySucceeded(data) {

            var entity = data.results[0];
            self.log('Retrieved [' + entityName + '] id ' + entity.id
                + ' from remote data source', entity, true);
            return entity;
        }

如果我查看FireBug中对控制器调用的响应,那么一切都在那里,包括填充的导航属性:

enter image description here

但是为什么breeze不能填充集合导航属性?

当我查看元数据存储时,从我所知道的一切看起来都很好:

enter image description here

我真的很想在检索库存后不得不单独往返查询InstrumentReadings。我觉得微风应该是为我做的。

感谢您的帮助! 科里。

2 个答案:

答案 0 :(得分:0)

使用expand查询方法eager load InstrumentReadings。

return EntityQuery.from('Inventories')
    .expand('InstrumentReadings')  // <-- include the instrument readings
    .withParameters({ id: id })
    .using(self.manager)
    .execute()
    .then(querySucceeded, self._queryFailed);

答案 1 :(得分:0)

我查看了其他帖子,并回顾了如何在子实体中定义外键。事实证明,该实体上还有其他3个外键,这些外键似乎混淆了EF和Breeze。当我重构子实体以包含单个导航属性时,一切都开始工作了。