Merge pull request #1239 from cnurse/dev
Implement Database Migrations and add Multi-Database Support
This commit is contained in:
		
							
								
								
									
										8
									
								
								Oqtane.Shared/Enums/MigrationType.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Oqtane.Shared/Enums/MigrationType.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| namespace Oqtane.Enums | ||||
| { | ||||
|     public enum MigrationType | ||||
|     { | ||||
|         Up, | ||||
|         Down | ||||
|     } | ||||
| } | ||||
							
								
								
									
										31
									
								
								Oqtane.Shared/Interfaces/IOqtaneDatabase.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Oqtane.Shared/Interfaces/IOqtaneDatabase.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| using System.Collections.Generic; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Migrations.Operations; | ||||
| using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; | ||||
| using Oqtane.Models; | ||||
|  | ||||
| namespace Oqtane.Interfaces | ||||
| { | ||||
|     public interface IOqtaneDatabase | ||||
|     { | ||||
|         public string FriendlyName { get; } | ||||
|  | ||||
|         public string Name { get; } | ||||
|  | ||||
|         public string Provider { get; } | ||||
|  | ||||
|         public List<ConnectionStringField> ConnectionStringFields { get; } | ||||
|  | ||||
|         public OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name); | ||||
|  | ||||
|         public string BuildConnectionString(); | ||||
|  | ||||
|         public string ConcatenateSql(params string[] values); | ||||
|  | ||||
|         public string RewriteName(string name); | ||||
|  | ||||
|         public void UpdateIdentityStoreTableNames(ModelBuilder builder); | ||||
|  | ||||
|         public DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										13
									
								
								Oqtane.Shared/Models/ConnectionStringField.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Oqtane.Shared/Models/ConnectionStringField.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| namespace Oqtane.Models | ||||
| { | ||||
|     public class ConnectionStringField | ||||
|     { | ||||
|         public string FriendlyName { get; set; } | ||||
|  | ||||
|         public string HelpText { get; set; } | ||||
|  | ||||
|         public string Name { get; set; } | ||||
|  | ||||
|         public string Value { get; set; } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										9
									
								
								Oqtane.Shared/Models/Database.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Oqtane.Shared/Models/Database.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| namespace Oqtane.Models | ||||
| { | ||||
|     public class Database | ||||
|     { | ||||
|         public string Name { get; set; } | ||||
|  | ||||
|         public string Type { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -7,6 +7,7 @@ namespace Oqtane.Models | ||||
|         public int TenantId { get; set; } | ||||
|         public string Name { get; set; } | ||||
|         public string DBConnectionString { get; set; } | ||||
|         public string DBType { get; set; } | ||||
|         public string Version { get; set; } | ||||
|         public string CreatedBy { get; set; } | ||||
|         public DateTime CreatedOn { get; set; } | ||||
|  | ||||
| @ -5,8 +5,7 @@ using System.ComponentModel.DataAnnotations.Schema; | ||||
| 
 | ||||
| namespace Oqtane.Modules.HtmlText.Models | ||||
| { | ||||
|     [Table("HtmlText")] | ||||
|     public class HtmlTextInfo : IAuditable | ||||
|     public class HtmlText : IAuditable | ||||
|     { | ||||
|         [Key] | ||||
|         public int HtmlTextId { get; set; } | ||||
| @ -18,9 +18,17 @@ | ||||
|   </PropertyGroup> | ||||
|  | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.4" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.4" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" /> | ||||
|     <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> | ||||
|     <PackageReference Include="System.Text.Json" Version="5.0.0" /> | ||||
|     <PackageReference Include="System.Text.Json" Version="5.0.1" /> | ||||
|   </ItemGroup> | ||||
|  | ||||
|   <ItemGroup> | ||||
|     <Reference Include="Microsoft.EntityFrameworkCore.Relational, Version=5.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60"> | ||||
|       <HintPath>C:\Users\charl\.nuget\packages\microsoft.entityframeworkcore.relational\5.0.2\lib\netstandard2.1\Microsoft.EntityFrameworkCore.Relational.dll</HintPath> | ||||
|     </Reference> | ||||
|   </ItemGroup> | ||||
|  | ||||
| </Project> | ||||
|  | ||||
| @ -3,6 +3,7 @@ namespace Oqtane.Shared | ||||
|     public class InstallConfig | ||||
|     { | ||||
|         public string ConnectionString { get; set; } | ||||
|         public string DatabaseType { get; set; } | ||||
|         public string Aliases { get; set; } | ||||
|         public string TenantName { get; set; } | ||||
|         public bool IsNewTenant { get; set; } | ||||
|  | ||||
							
								
								
									
										59
									
								
								Oqtane.Shared/Shared/OqtaneDatabaseBase.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Oqtane.Shared/Shared/OqtaneDatabaseBase.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Migrations.Operations; | ||||
| using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; | ||||
| using Oqtane.Interfaces; | ||||
| using Oqtane.Models; | ||||
|  | ||||
| namespace Oqtane.Shared | ||||
| { | ||||
|     public abstract class OqtaneDatabaseBase : IOqtaneDatabase | ||||
|     { | ||||
|         protected OqtaneDatabaseBase(string name, string friendlyName, List<ConnectionStringField> connectionStringFields) | ||||
|         { | ||||
|             Name = name; | ||||
|             FriendlyName = friendlyName; | ||||
|             ConnectionStringFields = connectionStringFields; | ||||
|         } | ||||
|  | ||||
|         public  string FriendlyName { get; } | ||||
|  | ||||
|         public string Name { get; } | ||||
|  | ||||
|         public abstract string Provider { get; } | ||||
|  | ||||
|         public List<ConnectionStringField> ConnectionStringFields { get; } | ||||
|  | ||||
|         public abstract OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name); | ||||
|  | ||||
|         public abstract string BuildConnectionString(); | ||||
|  | ||||
|         public virtual string ConcatenateSql(params string[] values) | ||||
|         { | ||||
|             var returnValue = String.Empty; | ||||
|             for (var i = 0; i < values.Length; i++) | ||||
|             { | ||||
|                 if (i > 0) | ||||
|                 { | ||||
|                     returnValue += " + "; | ||||
|                 } | ||||
|                 returnValue += values[i]; | ||||
|             } | ||||
|  | ||||
|             return returnValue; | ||||
|         } | ||||
|  | ||||
|         public virtual string RewriteName(string name) | ||||
|         { | ||||
|             return name; | ||||
|         } | ||||
|  | ||||
|         public virtual void UpdateIdentityStoreTableNames(ModelBuilder builder) | ||||
|         { | ||||
|  | ||||
|         } | ||||
|  | ||||
|         public abstract DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString); | ||||
|     } | ||||
| } | ||||
| @ -2,12 +2,18 @@ | ||||
| { | ||||
|     public static class SettingKeys | ||||
|     { | ||||
|         public const string ConnectionStringsSection = "ConnectionStrings"; | ||||
|         public const string DatabaseSection = "Database"; | ||||
|         public const string InstallationSection = "Installation"; | ||||
|  | ||||
|         public const string ConnectionStringKey = "DefaultConnection"; | ||||
|  | ||||
|         public const string DatabaseTypeKey = "DatabaseType"; | ||||
|  | ||||
|         public const string DefaultAliasKey = "DefaultAlias"; | ||||
|         public const string HostPasswordKey = "HostPassword"; | ||||
|         public const string HostEmailKey = "HostEmail"; | ||||
|         public const string SiteTemplateKey = "SiteTemplate"; | ||||
|         public const string ConnectionStringKey = "DefaultConnection"; | ||||
|         public const string DefaultThemeKey = "DefaultTheme"; | ||||
|         public const string DefaultLayoutKey = "DefaultLayout"; | ||||
|         public const string DefaultContainerKey = "DefaultContainer"; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker