天天看點

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指令。這樣就完成了遷移的初始化。完成這一步後,以後再修改實體就能順利的使用遷移指令了。

轉載于:https://www.cnblogs.com/jidanfan/p/11517390.html