問題場景:我已經有一個資料庫,想用 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