首页 > 解决方案 > EF Core 迁移循环

问题描述

Course我在和Student实体之间定义了一个简单的多对多关系

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public List<Course> Courses { get; set; }
}

public class Course
{
    public int CourseId { get; set; }
    public string Name { get; set; }
    public List<Student> Students { get; set; }
}

我将两个实体都配置为使用my_schema数据库模式

 modelBuilder.Entity<Student>()
     .ToTable(nameof(Student), schema: "my_schema");

 modelBuilder.Entity<Course>()
     .ToTable(nameof(Course), schema: "my_schema");

运行生成的迁移后,数据库表按预期生成 数据库图

自动生成的连接表与其相关的表具有相同的模式。这导致了问题。

现在,每个新的迁移都将包含奇怪(且无用)的RenameTable操作:

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.RenameTable(
        name: "CourseStudent",
        newName: "CourseStudent",
        newSchema: "my_schema");
}

protected override void Down(MigrationBuilder migrationBuilder)
{
    migrationBuilder.RenameTable(
        name: "CourseStudent",
        schema: "my_schema",
        newName: "CourseStudent");
}

我正在使用 EntityFramework Core 版本 5.0.2。

我在生成的快照迁移文件中看到CourseStudent实体映射到表而不指定架构

modelBuilder.Entity("CourseStudent", b =>
    {
        b.Property<int>("CoursesCourseId")
            .HasColumnType("int");

        b.Property<int>("StudentsStudentId")
            .HasColumnType("int");

        b.HasKey("CoursesCourseId", "StudentsStudentId");

        b.HasIndex("StudentsStudentId");

        b.ToTable("CourseStudent");
    });

我想,由于缺少此信息,生成新迁移的工具陷入了一个循环,它正在更改连接表的架构,但忘记在某处注意这一点(快照)。还是我错过了什么?

我知道有一些解决方法,我只想知道这是一个错误还是我的错误实现。

谢谢

标签: c#sql-serverentity-framework-coremany-to-manyentity-framework-migrations

解决方案


推荐阅读