2016-04-13 12 views
11

Zum Beispiel, ich habe diese Einheiten:Fügen Sammlung in Entity Framework Kern

public class Book 
{ 
    [Key] 
    public string BookId { get; set; } 
    public List<BookPage> Pages { get; set; } 
    public string Text { get; set; } 
} 

public class BookPage 
{ 
    [Key] 
    public string BookPageId { get; set; } 
    public PageTitle PageTitle { get; set; } 
    public int Number { get; set; } 
} 

public class PageTitle 
{ 
    [Key] 
    public string PageTitleId { get; set; } 
    public string Title { get; set; } 
} 

Wie soll ich alle PageTitles laden, wenn ich nur die BookID wissen?

Hier ist es, wie ich versuche, dies zu tun:

using (var dbContext = new BookContext()) 
{ 
    var bookPages = dbContext 
     .Book 
     .Include(x => x.Pages) 
     .ThenInclude(x => x.Select(y => y.PageTitle)) 
     .SingleOrDefault(x => x.BookId == "some example id") 
     .Pages 
     .Select(x => x.PageTitle) 
     .ToList(); 
} 

Aber das Problem ist, dass es Ausnahme

Argument wirft: Die Eigenschaften Ausdruck ‚x => {von Seiten y in x wählen Sie [y] .PageTitle} 'ist nicht gültig. Der Ausdruck sollte einen Eigenschaftenzugriff darstellen: 't => t.MyProperty'. Verwenden Sie bei der Angabe mehrerer Eigenschaften einen anonymen Typ: 't => new {t.MyProperty1, t.MyProperty2}'. Parametername: propertyAccessExpression

Was ist falsch, was genau soll ich tun?

Antwort

27

Versuchen Zugriff PageTitle direkt in ThenInclude:

using (var dbContext = new BookContext()) 
{ 
    var bookPages = dbContext 
    .Book 
    .Include(x => x.Pages) 
    .ThenInclude(y => y.PageTitle) 
    .SingleOrDefault(x => x.BookId == "some example id") 
    .Select(x => x.Pages) 
    .Select(x => x.PageTitle) 
    .ToList(); 
} 
+9

, wie es funktioniert ist? Ich meine, wenn ich y.PageTitle tippe, habe ich kein Intellisense-Feld mit PageTitle, aber es funktioniert, baut! –

+1

Siehe https://github.com/dotnet/roslyn/issues/8237 – Smit

Verwandte Themen