使用breezejs和web api2获取相关实体时出错

使用breezejs和web api2获取相关实体时出错,breeze,Breeze,我们刚刚将Breezejs升级到最新版本1.4.5,以便我们可以将其与EF 6一起使用。我们还使用OData支持将该项目更新为WebAPI2 在我们的代码中,我们通过在我们的datacontext.js查询中使用expand来获取具有相关实体的实体: BandContext.prototype.getBandWithDetails = function (bandId) { var query = breeze.EntityQuery.from("Band").where(new

我们刚刚将Breezejs升级到最新版本1.4.5,以便我们可以将其与EF 6一起使用。我们还使用OData支持将该项目更新为WebAPI2

在我们的代码中,我们通过在我们的datacontext.js查询中使用expand来获取具有相关实体的实体:

BandContext.prototype.getBandWithDetails = function (bandId) {
        var query = breeze.EntityQuery.from("Band").where(new breeze.Predicate("Id", "==", bandId)).expand("BandMembers.User.Image, BandImages.Image, Image, BandFollowers, ExternalLinks");
        return this.executeQuery(query);
    };
在breezecontroller.cs中,我们的操作如下所示:

    [HttpGet]
    [Queryable(AllowedQueryOptions = AllowedQueryOptions.Supported | AllowedQueryOptions.Expand, MaxExpansionDepth = 4)]
    public IQueryable<Band> Band()
    {
        return WebRepository.Bands;
    }

我们完全不知道该怎么做,任何帮助都将不胜感激:

这通常是由于EF模型未完全迁移到WebApi2造成的。我猜您的服务器上正在抛出一个错误。尝试调试服务器端代码

另一位客户遇到此问题并评论:

我发现了问题,调试了获取元数据的函数,发现了一些客户端实体,这些实体是用指向旧实体框架5名称空间的关联定义的


如果这个问题还没有解决,我在使用.Expand时也遇到了相关实体未加载的问题。。。在客户机上。它们将通过网络发送,但Javascript中的结果对象不包含它们

最后,我发现我必须向代码优先实体添加显式外键

这不起作用
请注意额外的属性MainItemId,它突然使相关实体显示在Javascript查询结果中。

通常当我遇到此错误时,这是因为我试图对一个属性执行某些操作,该属性要么没有返回,要么不是导航实体上的有效属性。您确定这些是波段的有效属性吗?BandMembers.User.Image,BandImages.Image,Image,BandFollowers,ExternalLink当我尝试仅调用expand'BandFollowers'或expand'Image'时,我也会遇到相同的错误,我知道这些都是有效的。感谢快速响应,我现在已经尝试过了,但仍然没有成功。我深入研究了错误,得到的结果是:TypeError:relatedEntity.getProperty不是一个函数:14223这发生在:updateRelatedEntityInCollectionLooking走近一点,我发现我得到了相关实体及其属性,但没有breeze钩住它们的额外属性和函数。例外情况发生:如果!关联实体收益;var thisEntity=relatedEntity.getPropertyinverseProperty.name@JAYA在回溯代码并试图找出哪里出了问题后,我们对一个正常工作的verison和错误的版本进行了区分。唯一的区别是公共IQueryable乐队而不是公共IQueryable乐队和.fromBands而不是.fromBand当我们改回乐队时,一切又恢复正常了,我不明白为什么它能正常工作@这里有两个概念。一个是entityType的名称,可能是Band,另一个是正在查询的资源的名称,可能是Band。entityType名称是EF返回的名称,在元数据存储中可用。资源名称是WebApi控制器中的端点。更多信息请点击此处:
relatedEntity.getProperty is not a function
public class MainItem
{
    public MainItem()
    {
        this.RelatedItems = new HashSet<RelatedItem>();
    }
    public int Id { get; set; }
    public virtual ICollection<RelatedItem> RelatedItems { get; set; }
}
public class RelatedItem
{
    public int Id { get; set; }
    public MainItem MainItem { get; set; }
}
public class RelatedItem
{
    public int Id { get; set; }
    public MainItem MainItem { get; set; }
    public int MainItemId { get; set; }
    public string Name { get; set; }
}