gpt4 book ai didi

mysql - 在 EntityFrameworkCore 中加载相关数据时出错

转载 作者:行者123 更新时间:2023-11-29 17:31:56 25 4
gpt4 key购买 nike

加载相关数据(类(class)的类(class)页面)时出现以下错误。

错误

MySqlException: Unknown column 'c.Coursepages.CoursepageId' in 'field list'

失败点:

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

类(class)模型

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

类(class)页面模型:

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

Note : I am using ASP.Net Core 2.0 with MySQL using Pomelo.EntityFrameworkCore.MySQL driver.

最佳答案

问题的原因是:

public List < Coursepage > Topics { get; set; }

EntityFramework 尝试将此属性映射到数据库,并假定主键为“CoursepageId”,但在数据库中找不到该主键。

Any property which is not directly mapped to Database should be labeled with NotMapped attribute.

所以类(class)页面模型必须是这样的:

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

引用文献:

关于mysql - 在 EntityFrameworkCore 中加载相关数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50570766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com