未加载Breeze导航属性

时间:2014-01-09 19:37:29

标签: c# javascript breeze

我在ProjectUserProfile个实体之间有以下多对多模型。由于Breeze尚不支持多对多关系,因此我也暴露了中间实体ProjectMember。所以服务器端代码如下所示:

public class Project
{
   public int ProjectId { get; set; }
   public String Name { get; set; }
   public virtual List<ProjectMember> ProjectMembers { get; set; }
}

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public virtual List<ProjectMember> ProjectMembers { get; set; }
}

public class ProjectMember
{
    public int ProjectId { get; set; }
    [ForeignKey("ProjectId")]
    public Project Project { get; set; }

    public int UserId { get; set; }
    [ForeignKey("UserId")]
    public UserProfile UserProfile { get; set; }
}

从服务器返回的元数据似乎是正确的:

enter image description here

导航属性似乎由服务器正确发送。

当我通过以下方式向客户请求项目时:

var query = entityQuery.from("Projects")
                       .where('projectId', '==', projectId)
                       .expand("projectMembers");

返回的JSon数据是预期的数据:

enter image description here

但是,正如您在下面的屏幕截图中看到的那样,Project.ProjectMembers导航属性在客户端未正确构建:

enter image description here

我浏览了教程,微风文档,与导航属性相关的SO问题,但我仍然看不出我做错了什么。

问题: 鉴于上述信息,为什么Breeze没有加载ProjectMembers导航属性?

1 个答案:

答案 0 :(得分:1)

我首先检查EntityManager的metadataStore,以确保可以找到ProjectMember entityType。您可以在第一次查询后通过

执行此操作
var projectMemberType = myEntityManager.metadataStore.getEntityType("ProjectMember");

如果找不到projectMemberType,则问题与未正确关闭的元数据有关。

另一种可能性,您是否为ProjectMember类型定义了一个键(可能是两部分键)?