2014-12-07 82 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混淆。當我重構子實體以包含單個導航屬性時,所有內容都開始工作。