我在Project
和UserProfile
个实体之间有以下多对多模型。由于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; }
}
从服务器返回的元数据似乎是正确的:
导航属性似乎由服务器正确发送。
当我通过以下方式向客户请求项目时:
var query = entityQuery.from("Projects")
.where('projectId', '==', projectId)
.expand("projectMembers");
返回的JSon数据是预期的数据:
但是,正如您在下面的屏幕截图中看到的那样,Project.ProjectMembers
导航属性在客户端未正确构建:
我浏览了教程,微风文档,与导航属性相关的SO问题,但我仍然看不出我做错了什么。
问题:
鉴于上述信息,为什么Breeze没有加载ProjectMembers
导航属性?
答案 0 :(得分:1)
我首先检查EntityManager的metadataStore,以确保可以找到ProjectMember entityType。您可以在第一次查询后通过
执行此操作var projectMemberType = myEntityManager.metadataStore.getEntityType("ProjectMember");
如果找不到projectMemberType,则问题与未正确关闭的元数据有关。
另一种可能性,您是否为ProjectMember类型定义了一个键(可能是两部分键)?