EF mysql 数据迁移_EF Code First Migrations数据库迁移
1、EF Code First創建數據庫
新建控制臺應用程序Portal,通過程序包管理器控制臺添加EntityFramework。
在程序包管理器控制臺中執行以下語句,安裝EntityFramework。
PM> Install-Package EntityFramework
安裝成功后,界面提示如下圖:
在新建的Portal控制臺應用程序中添加兩個實體類,代碼結構如下:
其中,類文件PortalContext.cs的代碼如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data.Entity;usingSystem.Data.Entity.Infrastructure;usingPortal.Entities;usingPortal.Mapping;namespacePortal
{public classPortalContext : DbContext
{staticPortalContext()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
}public DbSet Provinces { get; set; }public DbSet Categories { get; set; }protected override voidOnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(newProvinceMap());
modelBuilder.Configurations.Add(newCategoryMap());
}
}
}
在靜態構造函數中,設置了當數據庫模型發生改變時,則刪除當前數據庫,重建新的數據庫。
代碼執行后,生成的數據庫:
2、EF Code First數據庫遷移
2.1、生成數據庫
修改類文件PortalContext.cs的靜態構造函數,取消當數據庫模型發生改變時刪除當前數據庫重建新數據庫的設置。
staticPortalContext()
{
Database.SetInitializer(null);
}
1>、在程序包管理器控制臺,執行語句:
PM> Enable-Migrations -EnableAutomaticMigrations
執行成功后,Portal控制臺應用程序代碼結構中,添加Migrations文件夾,并生成類文件Configuration.cs。
namespacePortal.Migrations
{usingSystem;usingSystem.Data.Entity;usingSystem.Data.Entity.Migrations;usingSystem.Linq;internal sealed class Configuration : DbMigrationsConfiguration{publicConfiguration()
{
AutomaticMigrationsEnabled= true;
}protected override voidSeed(Portal.PortalContext context)
{//This method will be called after migrating to the latest version.//You can use the DbSet.AddOrUpdate() helper extension method//to avoid creating duplicate seed data. E.g.//
//context.People.AddOrUpdate(//p => p.FullName,//new Person { FullName = "Andrew Peters" },//new Person { FullName = "Brice Lambson" },//new Person { FullName = "Rowan Miller" }//);//}
}
}
2>、在程序包管理器控制臺,執行語句:
PM> Add-Migration InitialCreate
執行成功后,在Migrations文件夾中新增類文件201309201556388_InitialCreate.cs
3>、在程序包管理器控制臺,執行語句:
PM> Update-Database -Verbose
執行結果生成與上面一致的數據庫
4>、在數據庫模型中添加City類,執行程序包管理器控制臺語句,Migrations文件夾中新增類文件201309201643300_AddCity.cs。
PM> Add-Migration AddCity
再次執行程序包管理器控制臺語句
PM> Update-Database -Verbose
Portal控制臺應用程序的代碼結構:
數據庫更新成功之后,在數據庫中新增表City。
2.2、版本回溯
修改數據庫中表City,刪除其中字段ProvinceNo。在程序包管理器控制臺中執行以下兩條語句:
PM> Add-Migration ModifyCity
PM> Update-Database -Verbose
執行成功之后,City表結構修改為:
執行程序包管理器控制臺語句,進行數據庫版本回溯。
PM> Update-Database –TargetMigration:"201309201643300_AddCity.cs"
2.3、生成數據庫版本之間的Sql腳本
執行程序包管理器控制臺語句,生成數據庫版本之間的Sql腳本。該操作僅為生成Sql語句,并未在數據庫中進行執行。
Update-Database -Script -SourceMigration:"201309201643300_AddCity.cs" -TargetMigration:"201309201708043_ModifyCity.cs"
其中-TargetMigration在未指定的情況,默認為遷移到最新的版本。
3、EF Code First Migrations語句的其他參數
1>、為指定的DbContext啟用數據庫遷移
PM> Enable-Migrations -ContextTypeName Portal.PortalContext
2>、設置是否允許自動遷移
Enable-Migrations
生成的Configuration.cs類文件的構造函數
publicConfiguration()
{
AutomaticMigrationsEnabled= false;
}
3>、Enable-Migrations指定項目名稱
PM> Enable-Migrations -StartUpProjectName Portal
如果在“Package Manager Console”中選擇了默認項目可以不設置“-StartUpProjectName”參數;如果多次執行此命令可以添加-Force參數。
4>、查看所執行的Sql語句 -Verbose指令
Update-Database -Verbose
4、代碼下載
5、參考資料
總結
以上是生活随笔為你收集整理的EF mysql 数据迁移_EF Code First Migrations数据库迁移的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomca7.0 mysql配置连接池_
- 下一篇: mysql php commit_php