Breeze:扩展,返回结果,但不显示在客户端

Breeze:扩展,返回结果,但不显示在客户端,breeze,Breeze,我拥有以下实体: public class Return : IAuditable { public int Id { get; set; } /* Other properties */ public virtual ReturnReason ReturnReason { get; set; } public virtual ICollection<ReturnItem> ReturnItems { get; set; } public

我拥有以下实体:

public class Return : IAuditable
{
    public int Id { get; set; }

    /* Other properties */

    public virtual ReturnReason ReturnReason { get; set; }
    public virtual ICollection<ReturnItem> ReturnItems { get; set; }

    public Return()
    {
        ReturnItems = new List<ReturnItem>();
    }
}
进行以下oData调用:

Breeze/Returns?$filter=Id%20eq%2015&$expand=ReturnItems%2CReturnReason
问题是,
return.returnItems
是一个空数组,尽管我知道这个
return
实体附加了项。但是
return.returnReason
已正确填充。当我在浏览器中转到该URL时,我可以看到填充的ReturnItems导航属性(我对我糟糕的裁剪能力进行了编程!):


我不知道为什么当我
console.log(data)
时它是空的?

我认为问题在于您的返回引用了一组ReturnItems(显然EF很乐意返回),但ReturnItem缺少返回的引用

public class ReturnItem
{
    public int Id { get; set; }

    /* Other properties */

    public virtual Return Return { get; set; }
}

另一个注意事项是,您的Return构造函数正在将ReturnItems实例化为IList,但本质上它应该已经构造好了,只是没有值。

(r)Return是javascript中的一个关键字,我很惊讶您将其用作实体名称时没有发现任何问题。您在哪里定义元数据?来自服务器:Breeze/metadata。我的BreezeController中有一个操作,当您调用manager.getEntities时,它会下拉元数据。您是否看到列表中的返回项?控制台在查询之前和之后记录它,注意返回项的导航属性(如果有)。我将返回项视为返回时的导航属性,但是,我不将返回视为返回项上的导航属性。这可能是问题所在吗?但是我的ReturnReason也没有作为导航属性的Return,但它可以正常工作?是的,Breeze需要知道ReturnItem是集合的一部分。检查我的答案,确保我放在那里的东西没有引起您的问题。问题是ReturnItem上缺少导航属性。奇怪的是,这在ReturnReason中运行良好,它也没有返回的导航属性?同样的问题,Breeze似乎无法“识别”一对多关系上自动生成的(EF代码优先)外键。在
ReturnItem
类上显式添加属性,例如
public int ReturnId{get;set;}
,可以解决这个问题。我不认为这是一件简单的事情-尝试获取该实体,然后在ASP.NET MVC控制器中调用ReturnItem.Return.Id,返回值也将为null。
public class ReturnItem
{
    public int Id { get; set; }

    /* Other properties */

    public virtual Return Return { get; set; }
}