我正在尝试在我的应用程序中查询以下实体:
public class Reservation
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ReservationId { get; set; }
public int PersonId { get; set; }
[ForeignKey("PersonId")]
public Person Person { get; set; }
[ForeignKey("FilmShowId")]
public FilmShow FilmShow { get; set; }
public int FilmShowId { get; set; }
}
public class Person
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PersonId { get; set; }
[Required]
[MaxLength(255)]
public string FirstName { get; set; }
[Required]
[MaxLength(255)]
public string LastName { get; set; }
public string Email { get; set; }
public ICollection<Reservation> Reservations =
new List<Reservation>();
}
我正在使用此查询:
public async Task<IEnumerable<Person>> GetPersonsAndReservations()
{
return await _context.Persons.Include(p => p.Reservations).ToListAsync();
}
我不断收到以下异常:
ArgumentException:包含属性lambda表达式'p => p.Reservations'无效。该表达式应表示属性访问:“ t => t.MyProperty”。要定位在派生类型上声明的导航,请指定目标类型的显式键入的lambda参数,例如“(派生d)=> d.MyProperty”。
我在这里做错什么了吗?
答案 0 :(得分:3)
Person.Reservations
是一个 field ,而convention的EF Core(尽管可以使用后备字段来实现)仅映射 properties :>
按照惯例,模型中将包含带有getter和setter的公共属性。
只需更改
public ICollection<Reservation> Reservations =
new List<Reservation>();
到
public ICollection<Reservation> Reservations { get; set; } =
new List<Reservation>();
问题应该解决。