在entityframeworkcore中加载相关数据时出错

bjp0bcyl  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(391)

在加载相关数据(课程的课程部分)时,出现以下错误。
错误
mysqlexception:“字段列表”中的未知列“c.coursepages.coursepageid”
故障点:

var course = await _context.Courses.Include(c => c.Coursepages)
                .SingleOrDefaultAsync(m => m.Url == courseUrl);

应用程序数据库上下文:

modelBuilder.Entity<Course>(entity =>
        {
            entity.ToTable("courses");

            entity.HasIndex(e => e.Id).HasName("idx_Courses_Id");

            entity.HasIndex(e => e.Url).HasName("uk_Url").IsUnique();

            entity.Property(e => e.Id).HasColumnType("int(11)");
        });

        modelBuilder.Entity<Coursepage>(entity =>
        {
            entity.ToTable("coursepages");

            entity.HasIndex(e => e.CourseId).HasName("idx_CoursePages_CourseId");

            entity.HasIndex(e => e.LessonId).HasName("idx_CoursePages_LessonId");

            entity.HasIndex(e => e.TopicId).HasName("idx_CoursePages_TopicId");

            entity.HasIndex(e => new { e.CourseId, e.LessonId, e.TopicId }).HasName("uk_CourseId_LessonId_TopicId").IsUnique();

            entity.Property(e => e.Id).HasColumnType("int(11)");
            entity.Property(e => e.CourseId).HasColumnType("int(11)");
            entity.Property(e => e.LessonId).HasColumnType("int(11)").HasDefaultValueSql("'0'");
            entity.Property(e => e.TopicId).HasColumnType("int(11)").HasDefaultValueSql("'0'");
            entity.HasOne(d => d.Course)
                .WithMany(p => p.Coursepages)
                .HasForeignKey(d => d.CourseId)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK_CoursePages_Courses_CourseId");
        });

课程模式

public partial class Course
{
    public Course()
    {
        Coursepages = new List<Coursepage>();
    }

    public int Id { get; set; }
    public string Url { get; set; }

    public ICollection<Coursepage> Coursepages { get; set; }
}

课程模式:

public partial class Coursepage
{
    public int Id { get; set; }
    public int CourseId { get; set; }
    public int LessonId { get; set; }
    public int TopicId { get; set; }
    public Course Course { get; set; }
}

注意:我使用的是asp.net core 2.0和mysql,使用的是pomelo.entityframeworkcore.mysql驱动程序。

bjg7j2ky

bjg7j2ky1#

问题的原因是:
公共列表主题{get;集合;}
entityframework尝试将此属性Map到数据库,并假定主键为“coursepageid”,而在数据库中找不到该主键。
任何未直接Map到数据库的属性都应标记为notmapped属性。
所以coursepages模型必须是这样的:

public partial class Coursepage
{
    public int Id { get; set; }
    public int CourseId { get; set; }
    public int LessonId { get; set; }
    public int TopicId { get; set; }
    public Course Course { get; set; }

      //  If current page is a Lesson Page
      [NotMapped]
      public List<Coursepage> Topics { get; set; }
}

注意:导入命名空间system.componentmodel.dataannotations.schema以使用notmapped属性。
参考文献:
包括和排除属性

相关问题