Sql server 在迁移中重新创建表会导致';无效的列名用户Id';

Sql server 在迁移中重新创建表会导致';无效的列名用户Id';,sql-server,entity-framework,entity-framework-6,entity-framework-migrations,Sql Server,Entity Framework,Entity Framework 6,Entity Framework Migrations,我提出这个问题是因为我的这个未回答/重复的问题: 这个问题的答案如下: 简而言之:“我必须在向上迁移方法中重新创建我的sql表” 我有一个用户有很多学校的班级代码关系: public class User { public int Id { get; set; } public string Name { get; set; } public ICollection<SchoolclassCode> Schoolcla

我提出这个问题是因为我的这个未回答/重复的问题:

这个问题的答案如下:

简而言之:“我必须在向上迁移方法中重新创建我的sql表

我有一个用户有很多学校的班级代码关系:

   public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public ICollection<SchoolclassCode> SchoolclassCodes { get; set; }
    }

public class SchoolclassCode
{
    public int Id { get; set; }

    public string Schoolclass { get; set; }

    public string Type { get; set; }

    public User User { get; set; }

    public int UserId { get; set; }
}
这是我的第二次迁移,它抛出了一个错误:当我执行
'Update-database'

public partial class ReCreateTable : DbMigration
    {
        public override void Up()
        {
            // backup schoolclassCodes table
            DropTable("SchoolclassCodes");
            CreateTable("SchoolclassCodes",
                c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Schoolclass = c.String(maxLength: 3), // 12a,7b
                    Type = c.String(),
                    UserId = c.Int(nullable: false,identity:false)
                })
                .PrimaryKey(t => t.Id)
                .ForeignKey("Users", t => t.UserId, cascadeDelete: true)
                .Index(s => s.Schoolclass, unique: true);


            // Delete Table Users
            Sql("Delete from Users");

            // Re-Insert data
            SqlFile("./Migrations/data.sql");

        }

        public override void Down()
        {
            //
        }
    }

如果
更新数据库
失败,我错在哪里?

如果要删除第一次迁移中创建的所有内容,请按照Down()代码中的说明删除它们:

观察到,您似乎正在将保留旧数据的需要与迁移结合起来。我会把两者分开

首先,保存旧数据。如果音量很低,可以考虑将其添加到种子()方法中。否则,请重命名SQL中的表,并在迁移后使用SQL重新填充这些表,以便将更正后的表添加回来


迁移旨在让您从模型中构建数据库,因此我将删除这两个迁移,并添加一个表示当前模型的新迁移。

您能否使用
update database-verbose
检查哪个特定查询引发此错误?此应用程序已在野外运行,其他开发人员不允许我删除这两个迁移;-)。我不会删除我在第一次迁移中创建的所有内容。我不想删除Users表。您应该能够保留Users表,但您需要删除FK约束。现在,我按照您所说的顺序删除Users表,然后出现错误:无法删除对象“dbo.Users”,因为它被外键约束引用。但在此之前:DropForeignKey(“dbo.Schoolclasscodes”、“UserId”、“dbo.Users”);为什么会出现此错误?当我在SSMS中的Schoolclasscodes表键文件夹下查看时:有一个黑色键,带有:FK_dbo.Schoolclasscodes_dbo.Users_Branch_id当我这样做时:EXEC sp_fkeys'SchooclassCodes'要获取表上的所有FK's,没有任何内容,但我在SSMStudio:P中看到了键
public partial class ReCreateTable : DbMigration
    {
        public override void Up()
        {
            // backup schoolclassCodes table
            DropTable("SchoolclassCodes");
            CreateTable("SchoolclassCodes",
                c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Schoolclass = c.String(maxLength: 3), // 12a,7b
                    Type = c.String(),
                    UserId = c.Int(nullable: false,identity:false)
                })
                .PrimaryKey(t => t.Id)
                .ForeignKey("Users", t => t.UserId, cascadeDelete: true)
                .Index(s => s.Schoolclass, unique: true);


            // Delete Table Users
            Sql("Delete from Users");

            // Re-Insert data
            SqlFile("./Migrations/data.sql");

        }

        public override void Down()
        {
            //
        }
    }
// backup schoolclassCodes table
DropForeignKey("dbo.SchoolclassCodes", "User_Id", "dbo.Users");
DropIndex("dbo.SchoolclassCodes", new[] { "User_Id" });
// DropTable("dbo.Users");
DropTable("dbo.SchoolclassCodes");