2013-12-17 25 views
20

我試圖從一個LocalDb獲取數據到我的MVC控制器。我嘗試這樣做:指定的包含路徑無效。該EntityType不聲明導航屬性的名稱*

UsersContext db = new UsersContext(); 
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId) 
          .Include(u => u.LastName).ToList(); 

它返回此錯誤:

A specified Include path is not valid. The EntityType 'ChatProj.Models.UserProfile' does not declare a navigation property with the name 'LastName'.

Here is a picture of my localDb and model.

任何想法,爲什麼它不工作?

回答

27

導航屬性應該是相關實體集合的實體類型。包括一些導航屬性意味着加入您當前的實體與一些相關的實體或實體。這允許在單個查詢中從多個表加載數據。 LastName是不是導航性能 - 這是簡單的現場,它會默認加載,你不需要把它列入:

UsersContext db = new UsersContext(); 
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId) 
          .ToList(); 

這個查詢將被翻譯成類似

SELECT UserId, UserName, LastName, FirstName 
FROM UserProfiles 
WHERE UserId = @value 
+1

乾杯m8,很棒的答案! – JazzMaster

+2

@JazzMaster歡迎:)也考慮閱讀[導航屬性](http://msdn.microsoft.com/en-us/data/jj713564.aspx) –

+0

@SergeyBerezovskiy,你介意看看我的問題嗎? https://stackoverflow.com/questions/28988951/export-to-excel-linq-include-foreignkey-values-in-tolist –

16

Include僅適用於導航屬性,並且LastName是標量屬性,因此根本不需要Include

+1

我自己也不能說得更好。非常簡潔。 – vapcguy

4

如果你想只檢索LastName,使用

Select(m => m.LastName) 

所以

var users = db.UserProfiles 
       .Where(u => u.UserId == WebSecurity.CurrentUserId) 
       .Select(u => u.LastName)//not Include 
       .ToList(); 

LastName只是模型中的一個字符串(標量屬性),而不是導航性能(與另一人的關係實體)

7

即使這與問題沒有太大關係,因爲谷歌帶你到這裏,我認爲這可能有助於注意到在一個可能的可能性是,你正在使用IEnumerable爲你收集,你應該使用ICollection,在這裏看到更多:https://stackoverflow.com/a/32997694/550975

+0

儘管此鏈接可能會回答問題,但最好在此處包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/12649105) – viral

+0

這是一個鏈接到另一個SO帖子...因此您的評論在這裏不合適。 –

+0

來自谷歌這裏,這是我正在尋找問題標題的問題。 – Dan

相關問題