在Entity Framework Core中包含集合
例如,我有这些实体:
public class Book { [Key] public string BookId { get; set; } public List 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; } }
如果我只知道BookId,我应该如何加载所有PageTitles?
这是我试图这样做的方式:
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(); }
但问题是,它会抛出exception
ArgumentException:属性表达式’x => {from page y in x select [y] .PageTitle}’无效。 表达式应表示属性访问:’t => t.MyProperty’。 指定多个属性时,请使用匿名类型:’t => new {t.MyProperty1,t.MyProperty2}’。 参数名称:propertyAccessExpression
怎么了,我该怎么办?
尝试直接在ThenInclude
访问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(); }