c# - ASP.net core 2.0 MVC 每个新的数据库迁移都包含以前迁移的数据

标签 c# database asp.net-core entity-framework-core

您好,我在添加新模型或编辑旧模型时尝试进行数据库迁移时遇到了问题。我正在使用 EntityFrameworkCore。问题是每个新迁移都包含前一个迁移的 Up 方法的代码。

/* migrationBuilder.DropIndex( name: "用户名索引", 表:“AspNetUsers”);

        migrationBuilder.DropIndex(
            name: "IX_AspNetUserRoles_UserId",
            table: "AspNetUserRoles");

        migrationBuilder.DropIndex(
            name: "RoleNameIndex",
            table: "AspNetRoles");

        migrationBuilder.AddColumn<DateTime>(
            name: "Birthdate",
            table: "AspNetUsers",
            nullable: false,
            defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));

        migrationBuilder.AddColumn<string>(
            name: "FirstName",
            table: "AspNetUsers",
            nullable: true);

        migrationBuilder.AddColumn<string>(
            name: "LastName",
            table: "AspNetUsers",
            nullable: true);
            */

        migrationBuilder.CreateTable(
            name: "Articles",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                AuthorId = table.Column<string>(nullable: true),
                Content = table.Column<string>(maxLength: 25000, nullable: false),
                PublishDate = table.Column<DateTime>(nullable: false),
                Title = table.Column<string>(maxLength: 150, nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Articles", x => x.Id);
                table.ForeignKey(
                    name: "FK_Articles_AspNetUsers_AuthorId",
                    column: x => x.AuthorId,
                    principalTable: "AspNetUsers",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Restrict);
            });

在这里,我试图将一个新模型文章迁移到数据库,但该方法包含以前迁移的一些内容,当我尝试更新数据库时,出现以下错误: “无法删除索引‘AspNetUserRoles.IX_AspNetUserRoles_UserId’,因为它不存在或您没有权限。” 如果我评论之前迁移的代码并只保留适当模型的数据,它就会成功迁移。但后来我添加了一个新模型“Supplement”,并通过在 Up 方法中添加的 Article 迁移得到了同样的结果:

/* migrationBuilder.DropIndex( name: "用户名索引", 表:“AspNetUsers”);

        migrationBuilder.DropIndex(
            name: "IX_AspNetUserRoles_UserId",
            table: "AspNetUserRoles");

        migrationBuilder.DropIndex(
            name: "RoleNameIndex",
            table: "AspNetRoles");

        migrationBuilder.AddColumn<DateTime>(
            name: "Birthdate",
            table: "AspNetUsers",
            nullable: false,
            defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));

        migrationBuilder.AddColumn<string>(
            name: "FirstName",
            table: "AspNetUsers",
            nullable: true);

        migrationBuilder.AddColumn<string>(
            name: "LastName",
            table: "AspNetUsers",
            nullable: true);
            */

        migrationBuilder.CreateTable(
            name: "Articles",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                AuthorId = table.Column<string>(nullable: true),
                Content = table.Column<string>(maxLength: 25000, nullable: false),
                PublishDate = table.Column<DateTime>(nullable: false),
                Title = table.Column<string>(maxLength: 150, nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Articles", x => x.Id);
                table.ForeignKey(
                    name: "FK_Articles_AspNetUsers_AuthorId",
                    column: x => x.AuthorId,
                    principalTable: "AspNetUsers",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Restrict);
            });

        migrationBuilder.CreateTable(
            name: "Supplements",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                Description = table.Column<string>(nullable: true),
                Name = table.Column<string>(nullable: true),
                Price = table.Column<decimal>(nullable: false),
                Quantity = table.Column<int>(nullable: false),
                SupplementType = table.Column<int>(nullable: false),
                inStock = table.Column<bool>(nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Supplements", x => x.Id);
            });

我该如何解决这个问题?

最佳答案

另一种方法是确保映射正确,只删除上/下函数以获得干净的状态:

https://github.com/aspnet/EntityFrameworkCore/issues/11763

关于c# - ASP.net core 2.0 MVC 每个新的数据库迁移都包含以前迁移的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47708885/

相关文章:

c# - Windows 开始键的 Sendkeys

C#:将字符串数组中的数据输入到 MS Access 数据库表中

mysql - 无法将mysql数据从一个数据库转移到另一个数据库

java - Hibernate Schema generation 是否可以在没有数据库连接的情况下生成DDL

c# - 使用 Moq 中的任何结构参数验证方法调用

configuration - 如何在ASP.NET vNext中允许MIME扩展名映射?

c# - 如何使用类验证属性在属性上动态设置验证消息

c# - 从 Windows 窗体超时引用的 WCF

php - 自动将 Excel 导入 phpmyadmin

c# - ActionResult<IEnumerable<T>> 必须返回一个 List<T>