因此,首先使用实体框架代码,我有两个表。
public class Course
{
[Key, MaxLength(10)]
public string CourseId { get; set; }
[Required]
public DateTime Created { get; set; }
[Required]
public bool Active { get; set; }
public virtual IEnumerable<CourseText> CourseText { get; set; }
}
public class CourseText
{
[Key, Column(Order=0)]
public string CourseId { get; set; }
[Key, Column(Order=1)]
public string LanguageCode { get; set; }
public string CourseName { get; set; }
public string CourseDescription { get; set; }
public virtual Course Course { get; set; }
public virtual Language Language { get; set; }
}
在我的控制器中,我正在尝试查询信息,但我只想要一行用于CourseText,因为课程可以有多种语言。
public IEnumerable<Course> GetCourses(string languageCode)
{
return DbSet
.Where(a => a.Active)
.Include(a => a.CourseText)
.Include(a => a.CourseText.Where(b => b.CourseId == a.CourseId && b.LanguageCode == languageCode))
;
}
但我一直收到以下错误:
Message = Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。
请告诉我我做错了什么。
答案 0 :(得分:1)
Include路径表达式必须引用在类型上定义的导航属性。
由于您将Where
表达式放在Include
args中,因此会出现此错误。因为Where
返回的IEnumerable<T>
不是导航属性。
你可以这样做:
public IEnumerable<Course> GetCourses(string languageCode)
{
return DbSet
.Where(a => a.Active)
.Include(a => a.CourseText)
.Include(a => a.CourseText)
.Where(b => b.CourseText.LanguageCode == languageCode);
}
这假定CourseText
和Course
与CourseId