Entity Framework关联表查询报错'WorkID_Work'无效列名求助
解决 Entity Framework 关联查询报错:Invalid column name 'WorkID_Work'
错误根源
你在FT_Employee实体类中错误使用了ForeignKey特性,导致EF无法正确映射外键与导航属性的关联,进而自动生成了不存在的列名WorkID_Work。
具体来说,你给ID_Work字段标注的[ForeignKey("DM_Work")]是错误的——ForeignKey特性的参数应该是导航属性的名称(即Work),而非关联实体类的名称(DM_Work)。EF找不到正确的关联规则时,会默认采用「导航属性名+关联实体主键名」的规则生成列名,于是出现了这个不存在的列名错误。
修复方法
方法1:修正ForeignKey特性的参数
将ID_Work字段上的ForeignKey参数改为导航属性名Work:
public class FT_Employee { public string FirstName { get; set; } public string LastName { get; set; } [ForeignKey("Work")] [Column("ID_Work")] public int? ID_Work { get; set; } public DM_Work Work { get; set; } }
方法2:将ForeignKey特性移至导航属性
也可以把ForeignKey特性放在导航属性Work上,明确指定对应的外键字段名ID_Work:
public class FT_Employee { public string FirstName { get; set; } public string LastName { get; set; } [Column("ID_Work")] public int? ID_Work { get; set; } [ForeignKey("ID_Work")] public DM_Work Work { get; set; } }
额外性能优化
你的查询中使用了AsEnumerable(),这会把FT_Employee表的所有数据先加载到内存中再过滤,数据量大时性能极差。建议去掉AsEnumerable(),让EF生成SQL在数据库端完成过滤逻辑:
var employeeTable = _db.FT_Employee .Where(x => x.StartDate >= selectedStartDate && x.StartDate <= selectedEndDate && x.Work.WorkType == "Remote") .Select(x => new { x.FirstName, x.LastName }) .ToList();
内容的提问来源于stack exchange,提问作者Mohammad I
相关产品推荐
相关产品推荐

