题
我之间有以下多对多模型 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
正如您从下面的屏幕截图中看到的那样,导航属性在客户端上未正确构建:
我浏览了教程、微风文档、与导航属性相关的问题,但我仍然没有看到我做错了什么。
问题:鉴于上述信息,为什么 Breeze 没有加载 ProjectMembers
导航属性?
解决方案
我首先检查 EntityManager 的元数据存储,以确保可以找到 ProjectMember 实体类型。您可以在第一次查询后通过以下方式执行此操作
var projectMemberType = myEntityManager.metadataStore.getEntityType("ProjectMember");
如果未找到projectMemberType,则问题与未正确删除元数据有关。
另一种可能性是,您是否为 ProjectMember 类型定义了一个键(大概是一个由两部分组成的键)?
不隶属于 StackOverflow