2014-01-09 87 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