2013-11-28 53 views
1

首先,我真的非常感谢开发者...... Breeze绝对是太棒了,我无法感谢您的辛勤工作!尽管[BreezeQueryable(MaxExpansionDepth = 100)],深度展开无法正常工作

我一直在使用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); 
} 

顺便说一句 - 这是所有的单一病人,所以真的没有那么多的数据 - 它只是分隔很多!

如果有人有任何想法,我会非常感激!

干杯, 布拉德

PS:很显然,我并不需要一个 “MaxExpansionDepth = 100”,但我也试图与低值(4,5等)

编辑感谢Dominictus,我现在意识到真正的问题并不在于查询的深度 - BMDSites在响应中回来,但无论扩展深度如何,都不实现实体。如果我只是为他们查询(即BMDSites的PrintoutKey = x),他们会实现物化......但是,这又会导致10或15次到达服务器。我仍然很想知道如何一次搞定所有东西,或者只是了解为什么这些东西不会实现扩张!

编辑2:它只是发生在我身上的打印输出类是基类TPH继承层次的...在其他一些问题,环顾四周,我怀疑这是有可能的来源问题。

回答

1

原来,它与继承或扩展的深度无关......在创建简化模型时,我当然发现它工作得很好。加入我认为无关紧要的特性后,我最终破坏了它,并通过添加一些[NotMapped]属性来复制我的问题,这些属性提供了对BMDSites列表的一些简单访问。例如,在打印输出从派生的类:

[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的名单并没有填充。原来JSON。Breeze使用的净类不看[NotMapped](这是有道理的,因为它是序列化,而不是数据库映射)...通过在我的EF模型中添加对JSON.net的引用,并添加它的equivilent标签 - 即:[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; 
     } 
    } 

干杯, 布拉德的建议

0

如果你使用一些其他的查询Patients行动,我建议你复制Patients方法,将其命名为类似PatientsFull,并在那里做.Include而非客户方expand。有时扩展不能按预期工作。 (如果这是对Patients的唯一查询,那么只需更改该方法)

对于一些不同的想法,您必须记下弹出到控制台中的任何可能的错误。

+0

谢谢...还没加载,但它确实让我想直接检查响应 - 数据存在于对查询的响应中(使用您在操作中的.Include建议或原始扩展查询)......它只是没有物化通过微风进入物体!?对不起,如果我以前不清楚 - 客户端或服务器上没有显示错误。 – bparcels