EF Core使用Include()遇CS1061错误:找不到Clients属性
问题解决方法
核心错误修正
你的代码触发CS1061错误,是因为Reservation类中没有名为Clients的属性,你定义的是单数的Client导航属性(对应单个客户)。
把查询代码里的Include(x => x.Clients)改为Include(x => x.Client)即可解决:
using (var context = new HolidaysDbContext()) { var reservations = context.Reservations.Include(x => x.Client); }
额外优化建议
导航属性命名规范
按照C#命名约定,导航属性应该使用PascalCase(首字母大写),集合类型导航属性用复数,单个实体用单数:public class Client { // ...其他属性 public virtual ICollection<Reservation> Reservations { get; set; } } public class Reservation { // ...其他属性 public virtual Client Client { get; set; } public virtual Trip Trip { get; set; } } public class Trip { // ...其他属性 public virtual ICollection<Reservation> Reservations { get; set; } }外键属性无需virtual修饰
virtual关键字是EF Core用于延迟加载导航属性的,值类型的外键属性(比如clientId、tripId)不需要加virtual:public class Reservation { // ...其他属性 public int clientId { get; set; } public virtual Client Client { get; set; } public int tripId { get; set; } public virtual Trip Trip { get; set; } }初始化集合导航属性
为避免空引用异常,建议在构造函数中初始化集合类型的导航属性:public Client() { Reservations = new List<Reservation>(); } public Trip() { Reservations = new List<Reservation>(); }
内容的提问来源于stack exchange,提问作者KrzysiekYESS
相关产品推荐
相关产品推荐

