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