【问题标题】:Error while loading related data in EntityFrameworkCore在 EntityFrameworkCore 中加载相关数据时出错
【发布时间】:2018-11-07 07:21:54
【问题描述】:

我在加载相关数据(课程的课程页面)时遇到错误。

错误

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; }
}

注意:我正在使用带有 Pomelo.EntityFrameworkCore.MySQL 驱动程序的 MySQL 的 ASP.Net Core 2.0。

【问题讨论】:

  • 嗨,投反对票。您能否发表评论并说明原因/理由?这将非常有帮助。

标签: mysql asp.net-core-mvc entity-framework-core asp.net-core-2.0


【解决方案1】:

问题的原因是:

公开列表 Topics { get;放; }

EntityFramework 尝试将此属性映射到数据库,并假定主键为“CoursepageId”,它在数据库中的任何位置都找不到。

任何未直接映射到数据库的属性都应使用 NotMapped 属性进行标记。

所以课程页面模型必须是这样的:

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属性。

参考文献:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 2023-03-18
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多