C# EF 7:如何在一对多关系中加载相关实体
我有以下代码。 为什么我的导航属性(课程中的要求和课程中的要求)为空C# EF 7:如何在一对多关系中加载相关实体,c#,asp.net,entity-framework,asp.net-core,entity-framework-core,C#,Asp.net,Entity Framework,Asp.net Core,Entity Framework Core,我有以下代码。 为什么我的导航属性(课程中的要求和课程中的要求)为空 public class Course : AbsEntity { [Key] public string Title { get; set; } public string Term { get; set; } public int Year { get; set; } public string
public class Course : AbsEntity {
[Key]
public string Title { get; set; }
public string Term { get; set; }
public int Year { get; set; }
public string CourseId { get; set; }
public double GradePercent { get; set; }
public string GradeLetter { get; set; }
public string Status { get; set; }
public int ReqId { get; set; }
public Requirement Requirement { get; set; }
}
public class Requirement : AbsEntity {
[Key]
public int ReqId { get; set; }
public string ReqName { get; set; }
public ICollection<Course> Courses { get; set; }
}
// In DbContext
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Course>().HasOne(c => c.Requirement).WithMany(r => r.Courses).HasForeignKey(c => c.ReqId);
modelBuilder.Entity<Requirement>().HasMany(r => r.Courses).WithOne(c => c.Requirement);
}
公共课程:AbsEntity{
[关键]
公共字符串标题{get;set;}
公共字符串项{get;set;}
公共整数年{get;set;}
公共字符串CourseId{get;set;}
公共双级百分比{get;set;}
公共字符串字母{get;set;}
公共字符串状态{get;set;}
public int requid{get;set;}
公共需求{get;set;}
}
公共类要求:AbsEntity{
[关键]
public int requid{get;set;}
公共字符串ReqName{get;set;}
公共ICollection课程{get;set;}
}
//在DbContext中
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().HasOne(c=>c.Requirement).WithMany(r=>r.Courses).HasForeignKey(c=>c.ReqId);
modelBuilder.Entity()有许多(r=>r.Courses),其中一个(c=>c.Requirement);
}
首先,您不需要配置两次关系,只需配置一次:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Course>().HasOne(c => c.Requirement)
.WithMany(r => r.Courses)
.HasForeignKey(c => c.ReqId);
}
谢谢你,这巧妙地解决了我的问题!
var query= ctx.Courses.Include(c=>c.Requirement).Where(...)...;