2014-12-07 40 views
0

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

这里的服务器端(生成)POCO微风控制器的方法:

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

但为什么不能轻松填充集合导航属性?

当我看着元数据储存器,一切看起来都从我可以告诉良好:

enter image description here

我真的很讨厌不得不做一个单独的往返查询InstrumentReadings我以后检索库存。我认为微风应该为我做到这一点。

感谢您的帮助! 科里。

回答

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); 
+0

感谢您的回复。这似乎合乎逻辑,但没有任何区别。更新了OP。 – cardinalPilot 2014-12-07 03:14:38

0

我看了一下其他帖子,并且回顾了如何在子实体中定义外键。原来在实体上还有3个外键可能会让EF和Breeze混淆。当我重构子实体以包含单个导航属性时,所有内容都开始工作。