实体框架核心3.0查询未提取所需信息

时间:2020-01-04 21:45:06

标签: entity-framework entity-framework-core

我正在尝试从Entity Framework Core 3中具有一对多关系的两个表中获取数据。代表这些表的模型如下所示。一个人可以有多个PersonNotes。我需要通过传递PersonId来查询PersonNotes表。我目前收到一条错误消息,指出“人”不包含“包含”的定义。如何制定此查询。

class Person
{
    [Key]
    public int Id { get; set; }
    public List<PersonNote> PersonNotes { get; set; }
}

class PersonNote
{
    [Key]
    public int Id { get; set; }
    public int PersonId { get; set; }
}

class StackOverflow : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public DbSet<PersonNote> PersonNotes  { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .HasMany(p => p.PersonNotes)
            .WithOne()
            .HasForeignKey(p => p.PersonId);
    }
}

查询

public IEnumerable<PersonNote> GetPersonNotes(int personId)
        {
            var PersonNotes1 = PersonNotes.Where(p => Person.Contains(p.Id)); 
            return PersonNotes1;
        }

1 个答案:

答案 0 :(得分:0)

通过一个 PersonNotes获得PersonID

IQueryable<PersonNote> GetPersonNotesSingleId(int ID) =>
    context.PersonNotes.Where(p => p.PersonId == ID);

要通过多个 PersonNotes s获得PersonID

IQueryable<PersonNote> GetPersonNotesMultipleId(IEnumerable<int> IDs) =>
    context.PersonNotes.Where(p => IDs.Contains(p.PersonId));

最后一个查询将生成IN T-SQL子句:

var notes = GetPersonNotesMultipleId(new[] { 1, 2, 3 });