2013-12-17 2 views
20

Ich versuche, Daten von einem LocalDb in meinen MVC-Controller zu bekommen. Ich versuchte dies:Ein angegebener Include-Pfad ist nicht gültig. Der EntityType deklariert keine Navigationseigenschaft mit dem Namen *

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

Es diesen Fehler zurückgibt:

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.

Jede Idee, warum es funktioniert nicht?

Antwort

27

Die Navigationseigenschaft sollte vom Entitätstyp der Auflistung verwandter Entitäten sein. Das Einbeziehen einer Navigationseigenschaft bedeutet , die Ihre aktuelle Entität mit einigen verbundenen Entitäten oder Entitäten verbindet. Dies ermöglicht das mühsame Laden von Daten aus mehreren Tabellen in einer einzigen Abfrage. LastName ist keine Navigationseigenschaft - es einfach Feld ist, und es wird standardmäßig geladen werden, brauchen Sie es nicht zählen:

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

Diese Abfrage wird wie

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

Prost m8, große Antwort! – JazzMaster

+2

@JazzMaster Willkommen :) betrachten Sie auch lesen über [Navigationseigenschaften] (http://msdn.microsoft.com/en-us/data/jj713564.aspx) –

+0

@SergeyBerezovskiy, würde es Ihnen etwas ausmachen, einen Blick auf meine Frage? https://stackoverflow.com/questions/28988951/export-to-excell-linq-include-foreignkey-values-in-tolist –

16
in etwas übersetzt werden

Include ist nur für Navigationseigenschaften, und LastName ist eine Skalareigenschaft, so dass Sie Include überhaupt nicht benötigen.

+1

Ich hätte es nicht besser gesagt, ich. Sehr prägnant. – vapcguy

4

Wenn Sie nur die LastName abrufen möchten, verwenden Sie

Select(m => m.LastName) 

so

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

LastName ist nur eine Zeichenfolge (Scalar-Eigenschaft) in Ihrem Modell, kein Navigations Eigenschaft (Beziehung mit einem anderen

7

Obwohl dies nicht ganz mit der Frage verbunden ist, da Google Sie hierher bringt, dachte ich, es könnte hilfreich sein, th zu bemerken bei einer wahrscheinlichen Möglichkeit ist, dass Sie IEnumerable für Sie Sammlung verwenden, sollten Sie ICollection verwenden, sehen Sie mehr hier: https://stackoverflow.com/a/32997694/550975

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/12649105) – viral

+0

Dies ist ein Link zu einem anderen SO-Post ... daher ist Ihr Kommentar hier unpassend. –

+0

Kam hier von Google, das war die Antwort, die ich zum Titel der gestellten Frage suchte. – Dan

Verwandte Themen