2014-01-09 51 views
2

我有以下多对多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

我会从检查EntityManager的metadataStore开始,以确保可以找到ProjectMember entityType。你可以,如果没有找到projectMemberType则问题与元数据没有被正确放倒办通过

var projectMemberType = myEntityManager.metadataStore.getEntityType("ProjectMember"); 

您第一次查询后做到这一点。

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

+0

非常感谢Jay!你的回答帮助我审查了我的元数据,你是可靠的,这是错误的。我在服务器上使用的模型是多对多的,我用流利的API编写了一个错误 – GETah

+0

请将此问题标记为“已回答”,否则我会继续检查:) –

+0

对不起,我忘了标记它:) 再次谢谢你。你们已经建立了一个真棒框架! – GETah