有些对象没有实现(但在查询响应中) - 继承问题?

时间:2013-11-29 00:13:47

标签: breeze

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

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

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

我在控制器操作上更改了MaxExpansionDepth,并且控制台或服务器端没有出现错误。我也通过单独查询它们来成功填充BMDSite对象,但这意味着要返回服务器10到20次......并不理想。

编辑:我刚刚尝试了其他几个查询,看来即使我只进行一次展开(即:.expand(“BMDSites”)),出现同样的问题 - 数据是响应,但没有实现到实体。当我仅查询BMDSites时(例如,对于特定的打印输出),阵列将被填充并正确实现。

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

非常感谢任何想法! -Brad

2 个答案:

答案 0 :(得分:1)

看起来它毕竟与继承无关......在为Jay创建简化模型时,我当然发现它工作得很好。添加回我认为无关的功能,我最终打破了它,并通过添加一些[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列表再次填充编辑 - 更具体地说,未被映射的属性触及的任何BMDSite都被排除在列表之外BMDSites)。事实证明,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;
        }
    }

干杯, 布拉德

答案 1 :(得分:0)

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

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