我有一个实体框架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中对控制器调用的响应,那么一切都在那里,包括填充的导航属性:
但是为什么breeze不能填充集合导航属性?
当我查看元数据存储时,从我所知道的一切看起来都很好:
我真的很想在检索库存后不得不单独往返查询InstrumentReadings。我觉得微风应该是为我做的。
感谢您的帮助! 科里。
答案 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。当我重构子实体以包含单个导航属性时,一切都开始工作了。