添加迁移不向实体框架核心中的现有表添加列

时间:2017-05-02 06:39:10

标签: entity-framework database-migration

我正在尝试向数据库中的现有表添加新列,我在类中指定新字段并运行Add-Migration命令,但每次使用CreateTable方法而不是AddColumn创建整个表的迁移类时。下面是类和生成的迁移类代码。

public class UserSetup
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool Age{ get; set; } // New Field Added

    }

但是对于新字段,它正在为全表创建迁移类,如下所示:

public partial class AddUserSetup_1 : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "UserSetup",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    Name= table.Column<string>(nullable: false),
                    Age= table.Column<int>(nullable: false),
                 },
                constraints: table =>
                {
                    table.PrimaryKey("PK_UserSetup", x => x.Id);
                });

       }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "UserSetup");
        }
    }

同样在Add-Migration中,它给出了以下错误,但是甚至创建了迁移类。

System.UnauthorizedAccessException:访问路径&#39; C:\ Projects \ PSM \ Portal \ src \ Portal \ Migrations \ ApplicationDbContextModelSnapshot.cs&#39;被拒绝。

2 个答案:

答案 0 :(得分:0)

评论您的新年龄字段

//public bool Age{ get;放; } // 添加新字段

打开“服务器资源管理器”窗口并确保您可以在“数据连接”中看到您的表

在包管理器控制台中运行:

  1. 启用迁移
  2. Add-Migration InitialCreate –IgnoreChanges
  3. 更新数据库

现在 EF 应该识别您的数据库 现在取消注释您的新“年龄”字段

在包管理器控制台中运行:

  1. 添加迁移 AddUserSetup_1
  2. 更新数据库

评论: 当您编写“Enable-Migrations”时,您可能需要像这样添加 -Force:

Enable-Migrations -Force

答案 1 :(得分:-1)

如果您正在使用TFS,请确保签出以便编辑您的&#39; ApplicationDbContextModelSnapshot.cs&#39;文件。它会工作得很好!