首先,我真的非常感谢开发者...... Breeze绝对太棒了,我不能为你的辛勤工作感谢你!
我一直在使用Breeze和EF(最新的Breeze,最新的EF)一段时间了,经过一些数据库更改后,我现在被迫查询第四层对象......起初,我点击了达到MaxExpansionDepth的错误,但根据SO上的几个问题/答案,我找到了[BreezeQueryable(MaxExpansionDepth = x)]属性。我已将此属性应用于控制器上的相关查询功能,从而消除了错误......但是,第四级的数据仍未填充。
我已经使用特定查询(基于4rth级别数据的键)成功检索了相关数据,并且在服务器端播放时一切正常...关系正常工作等...麻烦的查询如下:
function getPatient(patKey) {
var query = breeze.EntityQuery
.from("Patients")
.where("Key", "==", patKey)
.expand("..., ScanDates.Printouts.BMDSites, ...");
return app.dataservice.manager.executeQuery(query);
}
BTW - 这对于一个病人来说都是如此,所以确实没有那么多的数据 - 它只是分开了很多!
如果有人有任何想法,我会非常感激!
干杯, 布拉德
P.S。:显然,我不需要“MaxExpansionDepth = 100”,但我也尝试过低值(4,5等)
编辑:感谢Dominictus,我现在意识到真正的问题不在于查询的深度--BMDSites会在响应中回归,而不是实现实体而不管扩大深度。如果我只查询它们(即BMDSites,其中PrintoutKey = x),它们确实实现了......但是,这又导致10或15次访问服务器。我仍然想知道如何一次性获取所有内容,或者只是了解为什么这些内容不会在扩展中实现!
编辑2: 我刚刚想到Printout类是TPH继承层次结构的基类...看看其他一些问题,我怀疑这个可能是问题的根源。
答案 0 :(得分:1)
原来它与继承或扩展的深度无关......在创建简化模型时,我当然发现它工作得很好。添加回我认为无关的功能,我最终打破了它,并通过添加一些[NotMapped]属性来复制我的问题,这些属性提供了对BMDSites列表的一些轻松访问。例如,在从Printout派生的类中:
[NotMapped]
public BMDSite _Ud = null;
[NotMapped]
public BMDSite Ud
{
get
{
if (_Ud == null)
{
_Ud = BMDSites.Find(b => b.Region == Region.Forearm_UD);
}
return _Ud;
}
}
重新添加后,我的BMDSites列表再次没有填充。事实证明,Breeze使用的JSON.net类不会看[NotMapped](这是有意义的,因为它是序列化,而不是数据库映射)...通过在我的EF模型中添加对JSON.net的引用,以及添加它的等效标记 - 即:[NotMapped,JsonIgnore],它不会查看属性,一切正常。
底线(对于那些浏览的人)...上面的代码导致问题,下面的代码工作正常:
[NotMapped, JsonIgnore]
public BMDSite _Ud = null;
[NotMapped, JsonIgnore]
public BMDSite Ud
{
get
{
if (_Ud == null)
{
_Ud = BMDSites.Find(b => b.Region == Region.Forearm_UD);
}
return _Ud;
}
}
干杯, 布拉德
答案 1 :(得分:0)
如果您对Patients
操作使用其他一些查询,建议您复制Patients
方法,将其命名为PatientsFull
,并在其中.Include
代替客户端{ {1}}。有时扩展不能按预期工作。 (如果这是expand
的唯一查询,则只需更改该方法)
对于某些不同的想法,您必须记下任何可能出现在控制台中的错误。