返回總目錄《一步一步使用ABP框架搭建正式項目系列教程》html
咱們以前用的DBFirst建立了實體類,但當初這麼作的緣由是爲了節省時間。如今咱們經過建立的實體類和DbContext類利用EF的Code First數據庫遷移反過來建立數據庫。ABP模板默認開啓了遷移,而且添加了一下下面的Configuration類:數據庫
namespace Noah.ChargeStation.Migrations { internal sealed class Configuration : DbMigrationsConfiguration<ChargeStation.EntityFramework.ChargeStationDbContext> { public Configuration() { AutomaticMigrationsEnabled = false; ContextKey = "ChargeStation"; } /// <summary> /// 添加種子數據,好比默認管理員等數據 /// </summary> /// <param name="context">當前數據庫上下文子類</param> protected override void Seed(ChargeStation.EntityFramework.ChargeStationDbContext context) { context.DisableAllFilters(); new InitialDataBuilder(context).Build(); } } }
namespace Noah.ChargeStation.Migrations.SeedData { public class DefaultTenantRoleAndUserBuilder { private readonly ChargeStationDbContext _context; public DefaultTenantRoleAndUserBuilder(ChargeStationDbContext context) { _context = context; } public void Build() { CreateUserAndRoles(); } private void CreateUserAndRoles() { //Admin role for tenancy owner var adminRoleForTenancyOwner = _context.Roles.FirstOrDefault(r => r.TenantId == null && r.Name == "Admin"); if (adminRoleForTenancyOwner == null) { adminRoleForTenancyOwner = _context.Roles.Add(new Role { Name = "Admin", DisplayName = "Admin", IsStatic = true }); _context.SaveChanges(); } //Admin user for tenancy owner var adminUserForTenancyOwner = _context.Users.FirstOrDefault(u => u.TenantId == null && u.UserName == "admin"); if (adminUserForTenancyOwner == null) { adminUserForTenancyOwner = _context.Users.Add( new User { TenantId = null, UserName = "admin", Name = "System", Surname = "Administrator", EmailAddress = "admin@aspnetboilerplate.com", IsEmailConfirmed = true, Password = "AM4OLBpptxBYmM79lGOX9egzZk3vIQU3d/gFCJzaBjAPXzYIK3tQ2N7X4fcrHtElTw==" //123qwe }); _context.SaveChanges(); _context.UserRoles.Add(new UserRole(adminUserForTenancyOwner.Id, adminRoleForTenancyOwner.Id)); _context.SaveChanges(); } //Default tenant var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Default"); if (defaultTenant == null) { defaultTenant = _context.Tenants.Add(new Tenant { TenancyName = "Default", Name = "Default" }); _context.SaveChanges(); } //Admin role for 'Default' tenant var adminRoleForDefaultTenant = _context.Roles.FirstOrDefault(r => r.TenantId == defaultTenant.Id && r.Name == "Admin"); if (adminRoleForDefaultTenant == null) { adminRoleForDefaultTenant = _context.Roles.Add(new Role { TenantId = defaultTenant.Id, Name = "Admin", DisplayName = "Admin", IsStatic = true }); _context.SaveChanges(); } //Admin for 'Default' tenant var adminUserForDefaultTenant = _context.Users.FirstOrDefault(u => u.TenantId == defaultTenant.Id && u.UserName == "admin"); if (adminUserForDefaultTenant == null) { adminUserForDefaultTenant = _context.Users.Add( new User { TenantId = defaultTenant.Id, UserName = "admin", Name = "System", Surname = "Administrator", EmailAddress = "admin@aspnetboilerplate.com", IsEmailConfirmed = true, Password = "AM4OLBpptxBYmM79lGOX9egzZk3vIQU3d/gFCJzaBjAPXzYIK3tQ2N7X4fcrHtElTw==" //123qwe }); _context.SaveChanges(); _context.UserRoles.Add(new UserRole(adminUserForDefaultTenant.Id, adminRoleForDefaultTenant.Id)); _context.SaveChanges(); } } } }
在Seed方法中,添加了租戶,角色和用戶數據。如今,我來建立初始化遷移。打開包管理器控制檯,輸入下面的命令:框架
此處特別注意,紅色方框中必定不要忘了選擇EF項目,不然不會有下面出現的命令「Add-Migration」,」InitialData」是生成文件的後綴名(也是文件中類的名字),也能夠取其餘名字。ide
能夠看到生成的文件一個以cs結尾,這裏面的代碼是建立數據庫中表的,另外一個以Designer.cs結尾,記錄的是數據庫遷移的版本記錄,最後一個以.resx文件是資源文件,暫且不須要考慮。ui
剛纔咱們只是建立了建立數據庫所須要的類,但尚未建立數據庫。爲了建立數據庫,須要在包管理控制檯執行如下命令:spa
PM> Update-Database
該命令完成了此次數據庫的遷移,建立了數據庫並填充了種子數據。3d
當咱們改變實體類時,可使用Add-Migration命令建立新的遷移類和Update-Database命令更新數據庫。code
至此,數據庫遷移完成。下一次咱們說說《定義倉儲》。htm