一些对象没有具体化(但在查询响应中)-继承问题



我刚刚在查询中添加了第四层扩展,即:

       .expand("..., ScanDates.Printouts.BMDSites, ...");

我发现,尽管数据在响应中返回,但它并没有填充"打印输出"下面的对象(即,patient.ScanDates.Printouts.BDSites是一个空数组,尽管响应中返回了几个元素)。

我已经更改了控制器操作上的MaxExpansionDepth,控制台或服务器端没有出现错误。我还通过单独查询BMDSite对象成功地填充了它们,但这意味着要往返服务器十到二十次。。。不理想。

编辑:我刚刚尝试了其他几个查询,似乎即使我只进行了一次扩展(即:.expand("BMDSites")),也会出现同样的问题-数据是响应的,但没有具体化为实体。当我只查询BMDSites时(比如特定的Printout),数组会被正确填充和物化

编辑2:我刚刚想到Printout类是TPH继承层次结构的基类。。。环顾四周,我怀疑这可能是问题的根源

非常感谢你的想法!-Brad

看起来它毕竟与继承无关。。。在为周创建一个简化模型时,我当然发现它运行得很好。添加回我认为不相关的功能,我最终打破了它,并通过添加一些[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;
        }
    }

再次将其添加回来后,我的BMD站点列表没有填充编辑-更具体地说,任何被未映射属性触摸的BMD网站都将从BMD站点的列表中排除)。事实证明,Breeze使用的JSON.net类不关注[NotMapped](这是有意义的,因为它是序列化,而不是DB映射)。。。通过在我的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;
        }
    }

干杯,Brad

我首先要确保您正在执行的'expand'实际上是有效的,方法是在服务器上使用'Include'尝试完全相同的查询。如果失败,那么问题可能出在您的模型上。Breeze的expand变成了EF的Include。

如果查询在纯EF中工作,那么您能否详细说明模型中的相关属性以及继承层次结构,以便我们可以尝试复制您的问题?

最新更新