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,6 +1,8 @@
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders;
using Oqtane.Migrations.Extensions;
using Oqtane.Repository;
@ -9,52 +11,57 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(MasterDBContext))]
[Migration("Master.01.00.00.00")]
public class InitializeMaster : Migration
public class InitializeMaster : MultiDatabaseMigration
{
public InitializeMaster(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Create Tenant table
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder);
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder, ActiveDatabase);
tenantEntityBuilder.Create();
//Create Alias table
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder);
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder, ActiveDatabase);
aliasEntityBuilder.Create();
//Create ModuleDefinitions Table
var moduleDefinitionsEntityBuilder = new ModuleDefinitionsEntityBuilder(migrationBuilder);
var moduleDefinitionsEntityBuilder = new ModuleDefinitionsEntityBuilder(migrationBuilder, ActiveDatabase);
moduleDefinitionsEntityBuilder.Create();
//Create Job Table
var jobEntityBuilder = new JobEntityBuilder(migrationBuilder);
var jobEntityBuilder = new JobEntityBuilder(migrationBuilder, ActiveDatabase);
jobEntityBuilder.Create();
//Create JobLog Table
var jobLogEntityBuilder = new JobLogEntityBuilder(migrationBuilder);
var jobLogEntityBuilder = new JobLogEntityBuilder(migrationBuilder, ActiveDatabase);
jobLogEntityBuilder.Create();
}
protected override void Down(MigrationBuilder migrationBuilder)
{
//Drop Alias table
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder);
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder, ActiveDatabase);
aliasEntityBuilder.Drop();
//Drop JobLog Table
var jobLogEntityBuilder = new JobLogEntityBuilder(migrationBuilder);
var jobLogEntityBuilder = new JobLogEntityBuilder(migrationBuilder, ActiveDatabase);
jobLogEntityBuilder.Drop();
//Drop Tenant table
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder);
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder, ActiveDatabase);
tenantEntityBuilder.Drop();
//Drop ModuleDefinitions Table
var moduleDefinitionsEntityBuilder = new ModuleDefinitionsEntityBuilder(migrationBuilder);
var moduleDefinitionsEntityBuilder = new ModuleDefinitionsEntityBuilder(migrationBuilder, ActiveDatabase);
moduleDefinitionsEntityBuilder.Drop();
//Drop Job Table
var jobEntityBuilder = new JobEntityBuilder(migrationBuilder);
var jobEntityBuilder = new JobEntityBuilder(migrationBuilder, ActiveDatabase);
jobEntityBuilder.Drop();
}
}
}

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();
}
}

View File

@ -1,5 +1,7 @@
using Microsoft.EntityFrameworkCore.Infrastructure;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository;
@ -7,43 +9,47 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(MasterDBContext))]
[Migration("Master.01.00.01.00")]
public class AddAdditionalIndexesInMaster : Migration
public class AddAdditionalIndexesInMaster : MultiDatabaseMigration
{
public AddAdditionalIndexesInMaster(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Update Tenant table
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder);
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder, ActiveDatabase);
tenantEntityBuilder.AddIndex("IX_Tenant", "Name");
//Update Alias table
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder);
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder, ActiveDatabase);
aliasEntityBuilder.AddIndex("IX_Alias", "Name");
//Update ModuleDefinitions Table
var moduleDefinitionsEntityBuilder = new ModuleDefinitionsEntityBuilder(migrationBuilder);
var moduleDefinitionsEntityBuilder = new ModuleDefinitionsEntityBuilder(migrationBuilder, ActiveDatabase);
moduleDefinitionsEntityBuilder.AddIndex("IX_ModuleDefinition", "ModuleDefinitionName");
//Update Job Table
var jobEntityBuilder = new JobEntityBuilder(migrationBuilder);
var jobEntityBuilder = new JobEntityBuilder(migrationBuilder, ActiveDatabase);
jobEntityBuilder.AddIndex("IX_Job", "JobType");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
//Update Tenant table
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder);
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder, ActiveDatabase);
tenantEntityBuilder.DropIndex("IX_Tenant");
//Update Alias table
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder);
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder, ActiveDatabase);
aliasEntityBuilder.DropIndex("IX_Alias");
//Update ModuleDefinitions Table
var moduleDefinitionsEntityBuilder = new ModuleDefinitionsEntityBuilder(migrationBuilder);
var moduleDefinitionsEntityBuilder = new ModuleDefinitionsEntityBuilder(migrationBuilder, ActiveDatabase);
moduleDefinitionsEntityBuilder.DropIndex("IX_ModuleDefinition");
//Update Job Table
var jobEntityBuilder = new JobEntityBuilder(migrationBuilder);
var jobEntityBuilder = new JobEntityBuilder(migrationBuilder, ActiveDatabase);
jobEntityBuilder.DropIndex("IX_Job");
}
}

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.Migrations.Extensions;
using Oqtane.Repository;
@ -8,28 +10,32 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(TenantDBContext))]
[Migration("Tenant.01.00.01.00")]
public class AddAdditionalIndexesInTenant : Migration
public class AddAdditionalIndexesInTenant : MultiDatabaseMigration
{
public AddAdditionalIndexesInTenant(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Create Index on Site
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder);
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
siteEntityBuilder.AddIndex("IX_Site", new [] {"TenantId", "Name"}, true);
//Create Index on Role table
var roleEntityBuilder = new RoleEntityBuilder(migrationBuilder);
var roleEntityBuilder = new RoleEntityBuilder(migrationBuilder, ActiveDatabase);
roleEntityBuilder.AddIndex("IX_Role", new [] {"SiteId", "Name"}, true);
//Create Index on Profile table
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder);
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder, ActiveDatabase);
profileEntityBuilder.AddIndex("IX_Profile", new [] {"SiteId", "Name"}, true);
//Create Index on File table
var fileEntityBuilder = new FileEntityBuilder(migrationBuilder);
var fileEntityBuilder = new FileEntityBuilder(migrationBuilder, ActiveDatabase);
fileEntityBuilder.AddIndex("IX_File", new [] {"FolderId", "Name"}, true);
//Add Columns to Notification table
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder);
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder, ActiveDatabase);
notificationEntityBuilder.AddStringColumn("FromDisplayName", 50, true);
notificationEntityBuilder.AddStringColumn("FromEmail", 256, true);
notificationEntityBuilder.AddStringColumn("ToDisplayName", 50, true);
@ -38,27 +44,26 @@ namespace Oqtane.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
//Drop Index on Site table
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder);
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
siteEntityBuilder.DropIndex("IX_Site");
//Drop Index on Role table
var roleEntityBuilder = new RoleEntityBuilder(migrationBuilder);
var roleEntityBuilder = new RoleEntityBuilder(migrationBuilder, ActiveDatabase);
roleEntityBuilder.DropIndex("IX_Role");
//Drop Index on Profile table
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder);
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder, ActiveDatabase);
profileEntityBuilder.DropIndex("IX_Profile");
//Drop Index on File table
var fileEntityBuilder = new FileEntityBuilder(migrationBuilder);
var fileEntityBuilder = new FileEntityBuilder(migrationBuilder, ActiveDatabase);
fileEntityBuilder.DropIndex("IX_File");
//Drop Columns from Notification table
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder);
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder, ActiveDatabase);
notificationEntityBuilder.DropColumn("FromDisplayName");
notificationEntityBuilder.DropColumn("FromEmail");
notificationEntityBuilder.DropColumn("ToDisplayName");
}
}
}

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;
@ -7,12 +9,16 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(TenantDBContext))]
[Migration("Tenant.01.00.01.01")]
public class AddAdditionColumnToNotifications : Migration
public class AddAdditionColumnToNotifications : MultiDatabaseMigration
{
public AddAdditionColumnToNotifications(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Add Column to Notification table
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder);
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder, ActiveDatabase);
notificationEntityBuilder.AddDateTimeColumn("SendOn", true);
migrationBuilder.Sql(
@ -26,7 +32,7 @@ namespace Oqtane.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
//Drop Column from Notification table
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder);
var notificationEntityBuilder = new NotificationEntityBuilder(migrationBuilder, ActiveDatabase);
notificationEntityBuilder.DropColumn("SendOn");
}
}

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;
@ -7,14 +9,18 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(TenantDBContext))]
[Migration("Tenant.01.00.02.01")]
public class DropColumnFromPage : Migration
public class DropColumnFromPage : MultiDatabaseMigration
{
public DropColumnFromPage(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Drop Column from Page table
if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.SqlServer")
if (ActiveDatabase.Name == "SqlServer" || ActiveDatabase.Name == "LocalDB")
{
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder);
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder, ActiveDatabase);
pageEntityBuilder.DropColumn("EditMode");
}
}
@ -22,7 +28,7 @@ namespace Oqtane.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
//Add Column to Page table
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder);
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder, ActiveDatabase);
pageEntityBuilder.AddBooleanColumn("EditMode");
}
}

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;
@ -7,25 +9,28 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(TenantDBContext))]
[Migration("Tenant.02.00.00.01")]
public class AddColumnToProfileAndUpdatePage : Migration
public class AddColumnToProfileAndUpdatePage : MultiDatabaseMigration
{
public AddColumnToProfileAndUpdatePage(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Add Column to Profile table
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder);
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder, ActiveDatabase);
profileEntityBuilder.AddStringColumn("Options", 2000, true);
///Update new field
migrationBuilder.Sql(
@"
UPDATE Profile
SET Options = ''
");
//Alter Column in Page table
if (migrationBuilder.ActiveProvider != "Microsoft.EntityFrameworkCore.Sqlite")
//Alter Column in Page table for Sql Server
if (ActiveDatabase.Name == "SqlServer" || ActiveDatabase.Name == "LocalDB")
{
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder);
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder, ActiveDatabase);
pageEntityBuilder.DropIndex("IX_Page");
pageEntityBuilder.AlterStringColumn("Path", 256);
pageEntityBuilder.AddIndex("IX_Page", new [] {"SiteId", "Path", "UserId"}, true);
@ -35,13 +40,13 @@ namespace Oqtane.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
//Drop Column from Profile table
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder);
var profileEntityBuilder = new ProfileEntityBuilder(migrationBuilder, ActiveDatabase);
profileEntityBuilder.DropColumn("Options");
//Alter Column in Page table
if (migrationBuilder.ActiveProvider != "Microsoft.EntityFrameworkCore.Sqlite")
if (ActiveDatabase.Name == "SqlServer" || ActiveDatabase.Name == "LocalDB")
{
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder);
var pageEntityBuilder = new PageEntityBuilder(migrationBuilder, ActiveDatabase);
pageEntityBuilder.DropIndex("IX_Page");
pageEntityBuilder.AlterStringColumn("Path", 50);
pageEntityBuilder.AddIndex("IX_Page", new [] {"SiteId", "Path", "UserId"}, true);

View File

@ -1,20 +1,27 @@
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Interfaces;
using Oqtane.Repository;
namespace Oqtane.Migrations
{
[DbContext(typeof(TenantDBContext))]
[Migration("Tenant.02.00.01.01")]
public class UpdateIconColumnInPage : Migration
public class UpdateIconColumnInPage : MultiDatabaseMigration
{
public UpdateIconColumnInPage(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
///Update Icon Field in Page
migrationBuilder.Sql(
@"
UPDATE [Page]
SET Icon = IIF(Icon <> '', 'oi oi-' + Icon, '');
UPDATE Page
SET Icon = 'oi oi-' + Icon
WHERE Icon <> ''
");
}
}

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;
@ -7,19 +9,23 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(TenantDBContext))]
[Migration("Tenant.02.00.01.02")]
public class AddLanguageTable : Migration
public class AddLanguageTable : MultiDatabaseMigration
{
public AddLanguageTable(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Create Language table
var languageEntityBuilder = new LanguageEntityBuilder(migrationBuilder);
var languageEntityBuilder = new LanguageEntityBuilder(migrationBuilder, ActiveDatabase);
languageEntityBuilder.Create();
}
protected override void Down(MigrationBuilder migrationBuilder)
{
//Drop Language table
var languageEntityBuilder = new LanguageEntityBuilder(migrationBuilder);
var languageEntityBuilder = new LanguageEntityBuilder(migrationBuilder, ActiveDatabase);
languageEntityBuilder.Drop();
}
}

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;
@ -7,12 +9,16 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(TenantDBContext))]
[Migration("Tenant.02.00.01.03")]
public class UpdatePageAndAddColumnToSite : Migration
public class UpdatePageAndAddColumnToSite : MultiDatabaseMigration
{
public UpdatePageAndAddColumnToSite(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Add Column to Site table
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder);
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
siteEntityBuilder.AddStringColumn("AdminContainerType", 200, true);
//Update new column
@ -25,8 +31,8 @@ namespace Oqtane.Migrations
//Delete records from Page
migrationBuilder.Sql(
@"
DELETE FROM [Page]
WHERE Path = 'admin/tenants';
DELETE FROM Page
WHERE Path = 'admin/tenants'
");
}
@ -34,7 +40,7 @@ namespace Oqtane.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
//Drop Column from Site table
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder);
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
siteEntityBuilder.DropColumn("AdminContainerType");
}
}

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;
@ -7,27 +9,31 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(MasterDBContext))]
[Migration("Master.02.01.00.00")]
public class AddIndexesForForeignKeyInMaster : Migration
public class AddIndexesForForeignKeyInMaster : MultiDatabaseMigration
{
public AddIndexesForForeignKeyInMaster(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Update JobLog table
var jobLogEntityBuilder = new JobLogEntityBuilder(migrationBuilder);
var jobLogEntityBuilder = new JobLogEntityBuilder(migrationBuilder, ActiveDatabase);
jobLogEntityBuilder.AddIndex("IX_JobLog_JobId", "JobId");
//Update Alias table
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder);
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder, ActiveDatabase);
aliasEntityBuilder.AddIndex("IX_Alias_TenantId", "TenantId");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
//Update JobLog table
var jobLogEntityBuilder = new JobLogEntityBuilder(migrationBuilder);
var jobLogEntityBuilder = new JobLogEntityBuilder(migrationBuilder, ActiveDatabase);
jobLogEntityBuilder.DropIndex("IX_JobLog_JobId");
//Update Alias table
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder);
var aliasEntityBuilder = new AliasEntityBuilder(migrationBuilder, ActiveDatabase);
aliasEntityBuilder.DropIndex("IX_Alias_TenantId");
}
}

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;
@ -7,21 +9,28 @@ namespace Oqtane.Migrations
{
[DbContext(typeof(MasterDBContext))]
[Migration("Master.02.01.00.01")]
public class AddDatabaseTypeColumnToTenant : Migration
public class AddDatabaseTypeColumnToTenant : MultiDatabaseMigration
{
public AddDatabaseTypeColumnToTenant(IEnumerable<IOqtaneDatabase> databases) : base(databases)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
//Add Column to Site table
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder);
var tenantEntityBuilder = new TenantEntityBuilder(migrationBuilder, ActiveDatabase);
tenantEntityBuilder.AddStringColumn("DBType", 200, true);
//Update new column
migrationBuilder.Sql(
@"
//Update new column if SqlServer (Other Databases will not have any records yet)
if (ActiveDatabase.Name == "SqlServer" || ActiveDatabase.Name == "LocalDB")
{
migrationBuilder.Sql(@"
UPDATE Tenant
SET DBType = 'Oqtane.Repository.Databases.SqlServerDatabase, Oqtane.Server'
SET DBType = 'SqlServer'
");
}
}
}
}

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<AliasEntityBuilder> _primaryKey = new("PK_Alias", x => x.AliasId);
private readonly ForeignKey<AliasEntityBuilder> _tenantForeignKey = new("FK_Alias_Tenant", x => x.TenantId, "Tenant", "TenantId", ReferentialAction.Cascade);
public AliasEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public AliasEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override AliasEntityBuilder BuildTable(ColumnsBuilder table)
{
AliasId = table.AddAutoIncrementColumn("AliasId");
AliasId = ActiveDatabase.AddAutoIncrementColumn(table,"AliasId");
Name = table.AddStringColumn("Name", 200);
TenantId = table.AddIntegerColumn("TenantId");
SiteId = table.AddIntegerColumn("SiteId");

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<AspNetUserClaimsEntityBuilder> _primaryKey = new("PK_AspNetUserClaims", x => x.Id);
private readonly ForeignKey<AspNetUserClaimsEntityBuilder> _aspNetUsersForeignKey = new("FK_AspNetUserClaims_AspNetUsers_UserId", x => x.UserId, "AspNetUsers", "Id", ReferentialAction.Cascade);
public AspNetUserClaimsEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public AspNetUserClaimsEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override AspNetUserClaimsEntityBuilder BuildTable(ColumnsBuilder table)
{
Id = table.AddAutoIncrementColumn("Id");
Id = ActiveDatabase.AddAutoIncrementColumn(table,"Id");
UserId = table.AddStringColumn("UserId", 450);
ClaimType = table.AddMaxStringColumn("ClaimType", true);
ClaimValue = table.AddMaxStringColumn("ClaimValue", true);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -13,7 +14,7 @@ namespace Oqtane.Migrations.EntityBuilders
private const string _entityTableName = "AspNetUsers";
private readonly PrimaryKey<AspNetUsersEntityBuilder> _primaryKey = new("PK_AspNetUsers", x => x.Id);
public AspNetUsersEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public AspNetUsersEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable UnusedAutoPropertyAccessor.Global
@ -10,7 +11,7 @@ namespace Oqtane.Migrations.EntityBuilders
{
public abstract class AuditableBaseEntityBuilder<TEntityBuilder> : BaseEntityBuilder<TEntityBuilder> where TEntityBuilder : BaseEntityBuilder<TEntityBuilder>
{
protected AuditableBaseEntityBuilder(MigrationBuilder migrationBuilder) : base (migrationBuilder)
protected AuditableBaseEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base (migrationBuilder, database)
{
}

View File

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
namespace Oqtane.Migrations.EntityBuilders
@ -10,9 +11,10 @@ namespace Oqtane.Migrations.EntityBuilders
{
private readonly MigrationBuilder _migrationBuilder;
protected BaseEntityBuilder(MigrationBuilder migrationBuilder)
protected BaseEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database)
{
_migrationBuilder = migrationBuilder;
ActiveDatabase = database;
ForeignKeys = new List<ForeignKey<TEntityBuilder>>();
}
@ -23,9 +25,10 @@ namespace Oqtane.Migrations.EntityBuilders
{
table.AddForeignKey(foreignKey);
}
}
protected IOqtaneDatabase ActiveDatabase { get; }
protected abstract TEntityBuilder BuildTable(ColumnsBuilder table);
protected string EntityTableName { get; init; }

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable UnusedAutoPropertyAccessor.Global
@ -10,7 +11,7 @@ namespace Oqtane.Migrations.EntityBuilders
{
public abstract class DeletableAuditableBaseEntityBuilder<TEntityBuilder> : AuditableBaseEntityBuilder<TEntityBuilder> where TEntityBuilder : BaseEntityBuilder<TEntityBuilder>
{
protected DeletableAuditableBaseEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
protected DeletableAuditableBaseEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
}

View File

@ -2,6 +2,7 @@ using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable MemberCanBePrivate.Global
@ -10,7 +11,7 @@ namespace Oqtane.Migrations.EntityBuilders
{
public abstract class DeletableBaseEntityBuilder<TEntityBuilder> : BaseEntityBuilder<TEntityBuilder> where TEntityBuilder : BaseEntityBuilder<TEntityBuilder>
{
protected DeletableBaseEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
protected DeletableBaseEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
}

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<FileEntityBuilder> _primaryKey = new("PK_File", x => x.FileId);
private readonly ForeignKey<FileEntityBuilder> _folderForeignKey = new("FK_File_Folder", x => x.FolderId, "Folder", "FolderId", ReferentialAction.Cascade);
public FileEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public FileEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override FileEntityBuilder BuildTable(ColumnsBuilder table)
{
FileId = table.AddAutoIncrementColumn("FileId");
FileId = ActiveDatabase.AddAutoIncrementColumn(table,"FileId");
FolderId = table.AddIntegerColumn("FolderId");
Name = table.AddStringColumn("Name", 50);
Extension = table.AddStringColumn("Extension", 50);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<FolderEntityBuilder> _primaryKey = new("PK_Folder", x => x.FolderId);
private readonly ForeignKey<FolderEntityBuilder> _siteForeignKey = new("FK_Folder_Site", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade);
public FolderEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public FolderEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override FolderEntityBuilder BuildTable(ColumnsBuilder table)
{
FolderId = table.AddAutoIncrementColumn("FolderId");
FolderId = ActiveDatabase.AddAutoIncrementColumn(table,"FolderId");
SiteId = table.AddIntegerColumn("SiteId");
ParentId = table.AddIntegerColumn("ParentId", true);
Name = table.AddStringColumn("Name", 50);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -13,7 +14,7 @@ namespace Oqtane.Migrations.EntityBuilders
private const string _entityTableName = "Job";
private readonly PrimaryKey<JobEntityBuilder> _primaryKey = new("PK_Job", x => x.JobId);
public JobEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public JobEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -21,7 +22,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override JobEntityBuilder BuildTable(ColumnsBuilder table)
{
JobId = table.AddAutoIncrementColumn("JobId");
JobId = ActiveDatabase.AddAutoIncrementColumn(table,"JobId");
Name = table.AddStringColumn("Name", 200);
JobType = table.AddStringColumn("JobType", 200);
Frequency = table.AddStringColumn("Frequency", 1);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedAutoPropertyAccessor.Global
@ -13,7 +14,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<JobLogEntityBuilder> _primaryKey = new("PK_JobLog", x => x.JobLogId);
private readonly ForeignKey<JobLogEntityBuilder> _jobLogForeignKey = new("FK_JobLog_Job", x => x.JobId, "Job", "JobId", ReferentialAction.Cascade);
public JobLogEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public JobLogEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -22,7 +23,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override JobLogEntityBuilder BuildTable(ColumnsBuilder table)
{
JobLogId = table.AddAutoIncrementColumn("JobLogId");
JobLogId = ActiveDatabase.AddAutoIncrementColumn(table,"JobLogId");
JobId = table.AddIntegerColumn("JobId");
StartDate = table.AddDateTimeColumn("StartDate");
FinishDate = table.AddDateTimeColumn("FinishDate", true);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<LanguageEntityBuilder> _primaryKey = new("PK_Language", x => x.LanguageId);
private readonly ForeignKey<LanguageEntityBuilder> _siteForeignKey = new("FK_Language_Site", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade);
public LanguageEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public LanguageEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override LanguageEntityBuilder BuildTable(ColumnsBuilder table)
{
LanguageId = table.AddAutoIncrementColumn("LanguageId");
LanguageId = ActiveDatabase.AddAutoIncrementColumn(table,"LanguageId");
SiteId = table.AddIntegerColumn("SiteId");
Name = table.AddStringColumn("Name", 100);
Code = table.AddStringColumn("Code", 10);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<LogEntityBuilder> _primaryKey = new("PK_Log", x => x.LogId);
private readonly ForeignKey<LogEntityBuilder> _siteForeignKey = new("FK_Log_Site", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade);
public LogEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public LogEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override LogEntityBuilder BuildTable(ColumnsBuilder table)
{
LogId = table.AddAutoIncrementColumn("LogId");
LogId = ActiveDatabase.AddAutoIncrementColumn(table,"LogId");
SiteId = table.AddIntegerColumn("SiteId", true);
LogDate = table.AddDateTimeColumn("LogDate");
PageId = table.AddIntegerColumn("PageId", true);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -13,7 +14,7 @@ namespace Oqtane.Migrations.EntityBuilders
private const string _entityTableName = "ModuleDefinition";
private readonly PrimaryKey<ModuleDefinitionsEntityBuilder> _primaryKey = new("PK_ModuleDefinition", x => x.ModuleDefinitionId);
public ModuleDefinitionsEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public ModuleDefinitionsEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -21,7 +22,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override ModuleDefinitionsEntityBuilder BuildTable(ColumnsBuilder table)
{
ModuleDefinitionId = table.AddAutoIncrementColumn("ModuleDefinitionId");
ModuleDefinitionId = ActiveDatabase.AddAutoIncrementColumn(table,"ModuleDefinitionId");
ModuleDefinitionName = table.AddStringColumn("ModuleDefinitionName", 200);
Name = table.AddStringColumn("Name", 200, true);
Description = table.AddStringColumn("Description", 2000, true);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<ModuleEntityBuilder> _primaryKey = new("PK_Module", x => x.ModuleId);
private readonly ForeignKey<ModuleEntityBuilder> _siteForeignKey = new("FK_Module_Site", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade);
public ModuleEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public ModuleEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override ModuleEntityBuilder BuildTable(ColumnsBuilder table)
{
ModuleId = table.AddAutoIncrementColumn("ModuleId");
ModuleId = ActiveDatabase.AddAutoIncrementColumn(table,"ModuleId");
SiteId = table.AddIntegerColumn("SiteId");
ModuleDefinitionName = table.AddStringColumn("ModuleDefinitionName", 200);
AllPages = table.AddBooleanColumn("AllPages");

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<NotificationEntityBuilder> _primaryKey = new("PK_Notification", x => x.NotificationId);
private readonly ForeignKey<NotificationEntityBuilder> _siteForeignKey = new("FK_Notification_Site", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade);
public NotificationEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public NotificationEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override NotificationEntityBuilder BuildTable(ColumnsBuilder table)
{
NotificationId = table.AddAutoIncrementColumn("NotificationId");
NotificationId = ActiveDatabase.AddAutoIncrementColumn(table,"NotificationId");
SiteId = table.AddIntegerColumn("SiteId");
FromUserId = table.AddIntegerColumn("FromUserId", true);
ToUserId = table.AddIntegerColumn("ToUserId", true);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<PageEntityBuilder> _primaryKey = new("PK_Page", x => x.PageId);
private readonly ForeignKey<PageEntityBuilder> _siteForeignKey = new("FK_Page_Site", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade);
public PageEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public PageEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,9 +24,16 @@ namespace Oqtane.Migrations.EntityBuilders
protected override PageEntityBuilder BuildTable(ColumnsBuilder table)
{
PageId = table.AddAutoIncrementColumn("PageId");
PageId = ActiveDatabase.AddAutoIncrementColumn(table,"PageId");
SiteId = table.AddIntegerColumn("SiteId");
Path = table.AddStringColumn("Path", 50);
if (ActiveDatabase.Name == "SqlServer" || ActiveDatabase.Name == "LocalDB")
{
Path = table.AddStringColumn("Path", 50);
}
else
{
Path = table.AddStringColumn("Path", 256);
}
Name = table.AddStringColumn("Name", 50);
Title = table.AddStringColumn("Title", 200, true);
ThemeType = table.AddStringColumn("ThemeType", 200, true);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -15,7 +16,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly ForeignKey<PageModuleEntityBuilder> _moduleForeignKey = new("FK_PageModule_Module", x => x.ModuleId, "Module", "ModuleId", ReferentialAction.NoAction);
private readonly ForeignKey<PageModuleEntityBuilder> _pageForeignKey = new("FK_PageModule_Page", x => x.PageId, "Page", "PageId", ReferentialAction.Cascade);
public PageModuleEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public PageModuleEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -25,7 +26,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override PageModuleEntityBuilder BuildTable(ColumnsBuilder table)
{
PageModuleId = table.AddAutoIncrementColumn("PageModuleId");
PageModuleId = ActiveDatabase.AddAutoIncrementColumn(table,"PageModuleId");
PageId = table.AddIntegerColumn("PageId");
ModuleId = table.AddIntegerColumn("ModuleId");
Title = table.AddStringColumn("Title", 200);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -16,7 +17,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly ForeignKey<PermissionEntityBuilder> _userForeignKey = new("FK_Permission_User", x => x.UserId, "User", "UserId", ReferentialAction.NoAction);
private readonly ForeignKey<PermissionEntityBuilder> _roleForeignKey = new("FK_Permission_Role", x => x.RoleId, "Role", "RoleId", ReferentialAction.NoAction);
public PermissionEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public PermissionEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -27,7 +28,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override PermissionEntityBuilder BuildTable(ColumnsBuilder table)
{
PermissionId = table.AddAutoIncrementColumn("PermissionId");
PermissionId = ActiveDatabase.AddAutoIncrementColumn(table,"PermissionId");
SiteId = table.AddIntegerColumn("SiteId");
EntityName = table.AddStringColumn("EntityName", 50);
EntityId = table.AddIntegerColumn("EntityId");

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<ProfileEntityBuilder> _primaryKey = new("PK_Profile", x => x.ProfileId);
private readonly ForeignKey<ProfileEntityBuilder> _siteForeignKey = new("FK_Profile_Sites", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade);
public ProfileEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public ProfileEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override ProfileEntityBuilder BuildTable(ColumnsBuilder table)
{
ProfileId = table.AddAutoIncrementColumn("ProfileId");
ProfileId = ActiveDatabase.AddAutoIncrementColumn(table,"ProfileId");
SiteId = table.AddIntegerColumn("SiteId", true);
Name = table.AddStringColumn("Name", 50);
Title = table.AddStringColumn("Title", 50);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -14,7 +15,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly PrimaryKey<RoleEntityBuilder> _primaryKey = new("PK_Role", x => x.RoleId);
private readonly ForeignKey<RoleEntityBuilder> _siteForeignKey = new("FK_Role_Site", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade);
public RoleEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public RoleEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -23,7 +24,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override RoleEntityBuilder BuildTable(ColumnsBuilder table)
{
RoleId = table.AddAutoIncrementColumn("RoleId");
RoleId = ActiveDatabase.AddAutoIncrementColumn(table,"RoleId");
SiteId = table.AddIntegerColumn("SiteId", true);
Name = table.AddStringColumn("Name", 256);
Description = table.AddStringColumn("Description", 256);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -13,7 +14,7 @@ namespace Oqtane.Migrations.EntityBuilders
private const string _entityTableName = "Setting";
private readonly PrimaryKey<SettingEntityBuilder> _primaryKey = new("PK_Setting", x => x.SettingId);
public SettingEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public SettingEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -21,7 +22,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override SettingEntityBuilder BuildTable(ColumnsBuilder table)
{
SettingId = table.AddAutoIncrementColumn("SettingId");
SettingId = ActiveDatabase.AddAutoIncrementColumn(table,"SettingId");
EntityName = table.AddStringColumn("EntityName", 50);
EntityId = table.AddIntegerColumn("EntityId");
SettingName = table.AddStringColumn("SettingName", 50);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -13,7 +14,7 @@ namespace Oqtane.Migrations.EntityBuilders
private const string _entityTableName = "Site";
private readonly PrimaryKey<SiteEntityBuilder> _primaryKey = new("PK_Site", x => x.SiteId);
public SiteEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public SiteEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -21,7 +22,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override SiteEntityBuilder BuildTable(ColumnsBuilder table)
{
SiteId = table.AddAutoIncrementColumn("SiteId");
SiteId = ActiveDatabase.AddAutoIncrementColumn(table,"SiteId");
TenantId = table.AddIntegerColumn("TenantId");
Name = table.AddStringColumn("Name", 200);
LogoFileId = table.AddIntegerColumn("LogoFileId", true);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -13,7 +14,7 @@ namespace Oqtane.Migrations.EntityBuilders
private const string _entityTableName = "Tenant";
private readonly PrimaryKey<TenantEntityBuilder> _primaryKey = new("PK_Tenant", x => x.TenantId);
public TenantEntityBuilder(MigrationBuilder migrationBuilder): base(migrationBuilder)
public TenantEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database): base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -21,7 +22,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override TenantEntityBuilder BuildTable(ColumnsBuilder table)
{
TenantId = table.AddAutoIncrementColumn("TenantId");
TenantId = ActiveDatabase.AddAutoIncrementColumn(table,"TenantId");
Name = table.AddStringColumn("Name", 100);
DBConnectionString = table.AddStringColumn("DBConnectionString", 1024);
Version = table.AddStringColumn("Version", 50, true);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -13,7 +14,7 @@ namespace Oqtane.Migrations.EntityBuilders
private const string _entityTableName = "User";
private readonly PrimaryKey<UserEntityBuilder> _primaryKey = new("PK_User", x => x.UserId);
public UserEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public UserEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -21,7 +22,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override UserEntityBuilder BuildTable(ColumnsBuilder table)
{
UserId = table.AddAutoIncrementColumn("UserId");
UserId = ActiveDatabase.AddAutoIncrementColumn(table,"UserId");
Username = table.AddStringColumn("Username", 256);
DisplayName = table.AddStringColumn("DisplayName", 50);
Email = table.AddStringColumn("Email", 256);

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces;
using Oqtane.Migrations.Extensions;
// ReSharper disable MemberCanBePrivate.Global
@ -15,7 +16,7 @@ namespace Oqtane.Migrations.EntityBuilders
private readonly ForeignKey<UserRoleEntityBuilder> _userForeignKey = new("FK_UserRole_User", x => x.UserId, "User", "UserId", ReferentialAction.Cascade);
private readonly ForeignKey<UserRoleEntityBuilder> _roleForeignKey = new("FK_UserRole_Role", x => x.RoleId, "Role", "RoleId", ReferentialAction.NoAction);
public UserRoleEntityBuilder(MigrationBuilder migrationBuilder) : base(migrationBuilder)
public UserRoleEntityBuilder(MigrationBuilder migrationBuilder, IOqtaneDatabase database) : base(migrationBuilder, database)
{
EntityTableName = _entityTableName;
PrimaryKey = _primaryKey;
@ -25,7 +26,7 @@ namespace Oqtane.Migrations.EntityBuilders
protected override UserRoleEntityBuilder BuildTable(ColumnsBuilder table)
{
UserRoleId = table.AddAutoIncrementColumn("UserRoleId");
UserRoleId = ActiveDatabase.AddAutoIncrementColumn(table,"UserRoleId");
UserId = table.AddIntegerColumn("UserId");
RoleId = table.AddIntegerColumn("RoleId");
EffectiveDate = table.AddDateTimeColumn("EffectiveDate", true);

View File

@ -6,14 +6,6 @@ namespace Oqtane.Migrations.Extensions
{
public static class ColumnsBuilderExtensions
{
public static OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(this ColumnsBuilder table, string name)
{
return table.Column<int>(name: name, nullable: false)
.Annotation("SqlServer:Identity", "1, 1")
.Annotation("Sqlite:Autoincrement", true)
.Annotation("MySql:ValueGeneratedOnAdd", true);
}
public static OperationBuilder<AddColumnOperation> AddBooleanColumn(this ColumnsBuilder table, string name, bool nullable = false)
{
return table.Column<bool>(name: name, nullable: nullable);
@ -36,12 +28,12 @@ namespace Oqtane.Migrations.Extensions
public static OperationBuilder<AddColumnOperation> AddMaxStringColumn(this ColumnsBuilder table, string name, bool nullable = false)
{
return table.Column<string>(name: name, nullable: nullable);
return table.Column<string>(name: name, nullable: nullable, unicode: true);
}
public static OperationBuilder<AddColumnOperation> AddStringColumn(this ColumnsBuilder table, string name, int length, bool nullable = false)
{
return table.Column<string>(name: name, maxLength: length, nullable: nullable);
return table.Column<string>(name: name, maxLength: length, nullable: nullable, unicode: true);
}
}

View File

@ -0,0 +1,19 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Interfaces;
namespace Oqtane.Migrations
{
public abstract class MultiDatabaseMigration : Migration
{
private readonly IEnumerable<IOqtaneDatabase> _databases;
protected MultiDatabaseMigration(IEnumerable<IOqtaneDatabase> databases)
{
_databases = databases;
}
protected IOqtaneDatabase ActiveDatabase => _databases.FirstOrDefault(d => d.Provider == ActiveProvider);
}
}

View File

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Internal;
using Oqtane.Interfaces;
using Oqtane.Repository.Databases.Interfaces;
namespace Oqtane.Migrations.Framework
{
public class MultiDatabaseMigrationsAssembly: MigrationsAssembly
{
private readonly IEnumerable<IOqtaneDatabase> _databases;
public MultiDatabaseMigrationsAssembly(
ICurrentDbContext currentContext,
IDbContextOptions options,
IMigrationsIdGenerator idGenerator,
IDiagnosticsLogger<DbLoggerCategory.Migrations> logger)
: base(currentContext, options, idGenerator, logger)
{
var multiDatabaseContext = currentContext.Context as IMultiDatabase;
if (multiDatabaseContext != null) _databases = multiDatabaseContext.Databases;
}
public override Migration CreateMigration(TypeInfo migrationClass, string activeProvider)
{
var hasCtorWithCacheOptions = migrationClass.GetConstructor(new[] { typeof(IEnumerable<IOqtaneDatabase>) }) != null;
if (hasCtorWithCacheOptions)
{
var migration = (Migration)Activator.CreateInstance(migrationClass.AsType(), _databases);
if (migration != null)
{
migration.ActiveProvider = activeProvider;
return migration;
}
}
return base.CreateMigration(migrationClass, activeProvider);
}
}
}