C# 在实体框架核心中包含集合
例如,我有以下实体:C# 在实体框架核心中包含集合,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,例如,我有以下实体: 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 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; }
}
但问题是,它抛出异常
ArgumentException:属性表达式“x=>{来自第y页
在x中选择[y].PageTitle}'无效。表达式应该表示
属性访问:“t=>t.MyProperty”。当指定多个
属性使用匿名类型:“t=>new{t.MyProperty1,
t、 MyProperty2}’。参数名称:propertyAccessExpression
出了什么问题,我该怎么办?尝试直接在
中访问PageTitle
,然后包括:
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();
}
它是如何工作的?我的意思是,当我输入y.PageTitle时,我没有带有PageTitle的Intellisense字段,但它可以工作,构建@尤里恩。这是因为您使用了此重载:然后包含([NotNullAttribute]此IIncludableQueryable源,[NotNullAttribute]表达式导航属性路径)
。VS intellisense看到另一个是thenclude([NotNullAttribute]此IIncludableQueryable源,[NotNullAttribute]表达式导航属性路径)
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();
}