EntityFramework Core Code First 已有数据库

时间:2022-04-28 06:03:20

  问题场景:我已经有一个数据库,想用 EF core Code First,怎么办?

  首先,可以参考微软的API文档:通过现有数据库在 ASP.NET Core 上开始使用 EF Core, 这一步可以将数据库表转换成对象,并生成DBContext。这时候只要在Startup中配置DBContext,就能够访问数据库了。

  接下来,我们根据业务需求需要修改表,按照Code First逻辑,只需要修改对应的实体,然后使用 Add-Migration命令就可以了。这时候,我们会发现迁移命令生成的文件竟然包含了建表的语句

    public partial class init : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
               name: "AspNetRoles",
               columns: table => new
               {
                   Id = table.Column<string>(nullable: false),
                   Name = table.Column<string>(maxLength: 256, nullable: true),
                   NormalizedName = table.Column<string>(maxLength: 256, nullable: true),
                   ConcurrencyStamp = table.Column<string>(nullable: true)
               },
               constraints: table =>
               {
                   table.PrimaryKey("PK_AspNetRoles", x => x.Id);
               });
        .... }

如果直接执行 update-database 命令的话会发现执行会报错。那怎么办呢,是不是已有数据库的情况下再也不能用Code First了?

当然不是啦,经过测试,只需要按一下方法,就能有效的把实体的更改更新到数据库了。

首选,需要确保目前的实体和数据库表一致,接着执行迁移命令 Add-Migration init。

接着,在Migrations目录中找到生成的 xxx_init.cs 文件,进去把 Up() Down()方法中的代码都去掉,只留下空方法体。

接着,执行 Update-Database命令。这样就完成了迁移的初始化。完成这一步后,以后再修改实体就能顺利的使用迁移命令了。