EntityFramework Core Code First 已有数据库

Posted jidanfan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EntityFramework Core Code First 已有数据库相关的知识,希望对你有一定的参考价值。

  问题场景:我已经有一个数据库,想用 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命令。这样就完成了迁移的初始化。完成这一步后,以后再修改实体就能顺利的使用迁移命令了。

以上是关于EntityFramework Core Code First 已有数据库的主要内容,如果未能解决你的问题,请参考以下文章

EntityFramework 7 更名为EntityFramework Core(预发布状态)

EntityFramework Code First 添加唯一键

EntityFramework Code-First 简易教程-------领域类的配置

使用 EntityFramework.Core 从自引用表加载完整的层次结构

从零开始学 ASP.NET Core 与 EntityFramework Core 目录

EntityFramework Core 中的映射继承