2011-10-07 47 views
0

ASP.net MVC3剃刀EF不能返回,以期包括()

當我這樣做它的工作原理:

public ViewResult Index() 
    { 
     return View(db.Songs.Include("Artist").ToList()); 
    } 

但這並不:

public ViewResult Index() 
    { 
     return View(db.Artists.Include("Song").ToList()); 
    } 

我收到此錯誤:

指定的包含路徑無效。 EntityType'MVCProject.Models.Artist'不聲明名稱爲'Song'的導航屬性。

任何想法爲什麼?如果你需要更多的信息/代碼,請提及哪些。但是請讓我知道這樣的事情會發生在哪裏,以及如何解決。這讓我瘋狂。

謝謝。

藝術家類別:

public class Artist 
{ 
    public int ArtistID{ get; set; } 
    public string Name { get; set; } 
    public IQueryable<Song> Songs{ get; set; } 
} 
+0

這意味着有沒有一個[導航屬性(http://msdn.microsoft .com/en-us/library/bb738520.aspx)從「Artists」映射到「Song」。 –

+0

@RobertHarvey謝謝,我很難理解這個鏈接。它不僅僅是一個指南,而是一個文檔,所以如果你有一個學習參考,它會很棒。感謝您的名字,我會搜索並等待答案,所以它是完整的。 – MasterMastic

回答

2

更換public IQueryable<Song> Songs{ get; set; }public virtual ICollection<Song> Songs{ get; set; }

public class Artist 
{ 
    public int ArtistID{ get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Song> Songs{ get; set; } 
} 

然後

return View(db.Artists.Include("Songs").ToList()); 
+0

謝謝,我不能使用IQueryable? (因爲我使用Where()來獲取如下歌曲:Songs = context.Songs.Where(s => s.Artist.Name ==「Artist Name」))。 如果我必須使用ICollection,我該怎麼做? – MasterMastic

+0

@Key沒有'IQueryable'可以執行對數據源的查詢。 「歌曲」應該是一個應該支持添加和刪除除了查詢之外的集合。 – Eranga

+0

哦,那麼我怎樣才能設法得到所有的藝術家的名字「X」,如第一評論中的歌曲? – MasterMastic

0

你可能有歌曲(複數)作爲導航屬性藝術家類。所以,return View(db.Artists.Include("Songs").ToList());應該可以工作。如果OT - 你需要證明模型類藝術家

+0

謝謝你的答覆。我試圖把它改成「歌曲」,我得到了同樣的錯誤。我編輯了這個問題,幷包含了藝術家課程。希望你能幫助我。 – MasterMastic

+1

您需要將歌曲標記爲虛擬(我假設您在EF中使用代碼優先模式) http://msdn.microsoft.com/en-us/library/gg715120%28v=vs.103%29.aspx – Felix