Added suuport to inject an IOqtaneDatabase in EntityBuilders to allow each Database to control certain Migration behaviors. Also updated Installer to dynamically build Database Configuration section

This commit is contained in:
Charles Nurse
2021-03-27 11:16:16 -07:00
parent 3a032f401a
commit 2fb63e8117
74 changed files with 1028 additions and 407 deletions

View File

@ -1,5 +1,7 @@
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository;
@ -8,86 +10,90 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(TenantDBContext))]
[Migration("Tenant.01.00.00.00")]
public class InitializeTenant : Migration
public class InitializeTenant : MultiDatabaseMigration
{
public InitializeTenant(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Create Site table
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder);
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
siteEntityBuilder.Create();
//Create Page table
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder);
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder, ActiveDatabase);
pageEntityBuilder.Create();
pageEntityBuilder.AddIndex("IX_Page", new [] {"SiteId", "Path", "UserId"}, true);
//Add Column to Page table (for Sql Server only) we will drop it later for Sql Server only
if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.SqlServer")
if (ActiveDatabase.Name == "SqlServer" || ActiveDatabase.Name == "LocalDB")
{
pageEntityBuilder.AddBooleanColumn("EditMode");
}
//Create Module table
var moduleEntityBuilder = new ModuleEntityBuilder(migrationBuilder);
var moduleEntityBuilder = new ModuleEntityBuilder(migrationBuilder, ActiveDatabase);
moduleEntityBuilder.Create();
//Create PageModule table
var pageModuleEntityBuilder = new PageModuleEntityBuilder(migrationBuilder);
var pageModuleEntityBuilder = new PageModuleEntityBuilder(migrationBuilder, ActiveDatabase);
pageModuleEntityBuilder.Create();
//Create User table
var userEntityBuilder = new UserEntityBuilder(migrationBuilder);
var userEntityBuilder = new UserEntityBuilder(migrationBuilder, ActiveDatabase);
userEntityBuilder.Create();
userEntityBuilder.AddIndex("IX_User", "Username", true);
//Create Role table
var roleEntityBuilder = new RoleEntityBuilder(migrationBuilder);
var roleEntityBuilder = new RoleEntityBuilder(migrationBuilder, ActiveDatabase);
roleEntityBuilder.Create();
//Create UserRole table
var userRoleEntityBuilder = new UserRoleEntityBuilder(migrationBuilder);
var userRoleEntityBuilder = new UserRoleEntityBuilder(migrationBuilder, ActiveDatabase);
userRoleEntityBuilder.Create();
userRoleEntityBuilder.AddIndex("IX_UserRole", new [] {"RoleId", "UserId"}, true);
//Create Permission table
var permissionEntityBuilder = new PermissionEntityBuilder(migrationBuilder);
var permissionEntityBuilder = new PermissionEntityBuilder(migrationBuilder, ActiveDatabase);
permissionEntityBuilder.Create();
permissionEntityBuilder.AddIndex("IX_Permission", new [] {"SiteId", "EntityName", "EntityId", "PermissionName", "RoleId", "UserId"}, true);
//Create Setting table
var settingEntityBuilder = new SettingEntityBuilder(migrationBuilder);
var settingEntityBuilder = new SettingEntityBuilder(migrationBuilder, ActiveDatabase);
settingEntityBuilder.Create();
settingEntityBuilder.AddIndex("IX_Setting", new [] {"EntityName", "EntityId", "SettingName"}, true);
//Create Profile table
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder);
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder, ActiveDatabase);
profileEntityBuilder.Create();
//Create Log table
var logEntityBuilder = new LogEntityBuilder(migrationBuilder);
var logEntityBuilder = new LogEntityBuilder(migrationBuilder, ActiveDatabase);
logEntityBuilder.Create();
//Create Notification table
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder);
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder, ActiveDatabase);
notificationEntityBuilder.Create();
//Create Folder table
var folderEntityBuilder = new FolderEntityBuilder(migrationBuilder);
var folderEntityBuilder = new FolderEntityBuilder(migrationBuilder, ActiveDatabase);
folderEntityBuilder.Create();
folderEntityBuilder.AddIndex("IX_Folder", new [] {"SiteId", "Path"}, true);
//Create File table
var fileEntityBuilder = new FileEntityBuilder(migrationBuilder);
var fileEntityBuilder = new FileEntityBuilder(migrationBuilder, ActiveDatabase);
fileEntityBuilder.Create();
//Create AspNetUsers table
var aspNetUsersEntityBuilder = new AspNetUsersEntityBuilder(migrationBuilder);
var aspNetUsersEntityBuilder = new AspNetUsersEntityBuilder(migrationBuilder, ActiveDatabase);
aspNetUsersEntityBuilder.Create();
aspNetUsersEntityBuilder.AddIndex("EmailIndex", "NormalizedEmail", true);
aspNetUsersEntityBuilder.AddIndex("UserNameIndex", "NormalizedUserName", true);
//Create AspNetUserClaims table
var aspNetUserClaimsEntityBuilder = new AspNetUserClaimsEntityBuilder(migrationBuilder);
var aspNetUserClaimsEntityBuilder = new AspNetUserClaimsEntityBuilder(migrationBuilder, ActiveDatabase);
aspNetUserClaimsEntityBuilder.Create();
aspNetUserClaimsEntityBuilder.AddIndex("IX_AspNetUserClaims_UserId", "UserId", true);
@ -96,67 +102,67 @@ namespace Oqtane.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
//Drop AspNetUserClaims table
var aspNetUserClaimsEntityBuilder = new AspNetUserClaimsEntityBuilder(migrationBuilder);
var aspNetUserClaimsEntityBuilder = new AspNetUserClaimsEntityBuilder(migrationBuilder, ActiveDatabase);
aspNetUserClaimsEntityBuilder.Drop();
//Drop AspNetUsers table
var aspNetUsersEntityBuilder = new AspNetUsersEntityBuilder(migrationBuilder);
var aspNetUsersEntityBuilder = new AspNetUsersEntityBuilder(migrationBuilder, ActiveDatabase);
aspNetUsersEntityBuilder.Drop();
//Drop File table
var fileEntityBuilder = new FileEntityBuilder(migrationBuilder);
var fileEntityBuilder = new FileEntityBuilder(migrationBuilder, ActiveDatabase);
fileEntityBuilder.Drop();
//Drop Folder table
var folderEntityBuilder = new FolderEntityBuilder(migrationBuilder);
var folderEntityBuilder = new FolderEntityBuilder(migrationBuilder, ActiveDatabase);
folderEntityBuilder.Drop();
//Drop Notification table
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder);
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder, ActiveDatabase);
notificationEntityBuilder.Drop();
//Drop Log table
var logEntityBuilder = new LogEntityBuilder(migrationBuilder);
var logEntityBuilder = new LogEntityBuilder(migrationBuilder, ActiveDatabase);
logEntityBuilder.Drop();
//Drop Profile table
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder);
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder, ActiveDatabase);
profileEntityBuilder.Drop();
//Drop Setting table
var settingEntityBuilder = new SettingEntityBuilder(migrationBuilder);
var settingEntityBuilder = new SettingEntityBuilder(migrationBuilder, ActiveDatabase);
settingEntityBuilder.Drop();
//Drop Permission table
var permissionEntityBuilder = new PermissionEntityBuilder(migrationBuilder);
var permissionEntityBuilder = new PermissionEntityBuilder(migrationBuilder, ActiveDatabase);
permissionEntityBuilder.Drop();
//Drop UserRole table
var userRoleEntityBuilder = new UserRoleEntityBuilder(migrationBuilder);
var userRoleEntityBuilder = new UserRoleEntityBuilder(migrationBuilder, ActiveDatabase);
userRoleEntityBuilder.Drop();
//Drop Role table
var roleEntityBuilder = new RoleEntityBuilder(migrationBuilder);
var roleEntityBuilder = new RoleEntityBuilder(migrationBuilder, ActiveDatabase);
roleEntityBuilder.Drop();
//Drop User table
var userEntityBuilder = new UserEntityBuilder(migrationBuilder);
var userEntityBuilder = new UserEntityBuilder(migrationBuilder, ActiveDatabase);
userEntityBuilder.Drop();
//Drop PageModule table
var pageModuleEntityBuilder = new PageModuleEntityBuilder(migrationBuilder);
var pageModuleEntityBuilder = new PageModuleEntityBuilder(migrationBuilder, ActiveDatabase);
pageModuleEntityBuilder.Drop();
//Drop Module table
var moduleEntityBuilder = new ModuleEntityBuilder(migrationBuilder);
var moduleEntityBuilder = new ModuleEntityBuilder(migrationBuilder, ActiveDatabase);
moduleEntityBuilder.Drop();
//Drop Page table
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder);
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder, ActiveDatabase);
pageEntityBuilder.Drop();
//Drop Site table
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder);
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
siteEntityBuilder.Drop();
}
}