Я получаю ниже ошибки, загружая связанные данные (курсовые рисунки курса).
ошибка
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.
Причиной проблемы является:
public List <Coursepage> Темы {get; set; задавать; } }
EntityFramework пытается сопоставить это свойство с базой данных и принимает первичный ключ как "CoursepageId", который он не находит нигде в db.
Любое свойство, которое напрямую не сопоставляется с базой данных, должно быть помечено атрибутом 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.
Рекомендации: