Merge pull request #5944 from sbwalker/dev
fix #5940 - add MySQL support to Oqtane 10
This commit is contained in:
@@ -197,7 +197,7 @@
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
await logger.LogError(ex, "Error Udate Job {Job} {Error}", job, ex.Message);
|
await logger.LogError(ex, "Error Updating Job {Job} {Error}", job, ex.Message);
|
||||||
AddModuleMessage(Localizer["Error.Job.Update"], MessageType.Error);
|
AddModuleMessage(Localizer["Error.Job.Update"], MessageType.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations.Operations;
|
using Microsoft.EntityFrameworkCore.Migrations.Operations;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
|
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
|
using MySql.EntityFrameworkCore.Metadata;
|
||||||
using Oqtane.Databases;
|
using Oqtane.Databases;
|
||||||
|
|
||||||
namespace Oqtane.Database.MySQL
|
namespace Oqtane.Database.MySQL
|
||||||
@@ -25,7 +26,7 @@ namespace Oqtane.Database.MySQL
|
|||||||
|
|
||||||
public override OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name)
|
public override OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name)
|
||||||
{
|
{
|
||||||
return table.Column<int>(name: name, nullable: false).Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn);
|
return table.Column<int>(name: name, nullable: false).Annotation("MySQL:ValueGenerationStrategy", MySQLValueGenerationStrategy.IdentityColumn);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ConcatenateSql(params string[] values)
|
public override string ConcatenateSql(params string[] values)
|
||||||
@@ -96,7 +97,7 @@ namespace Oqtane.Database.MySQL
|
|||||||
|
|
||||||
public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString)
|
public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString)
|
||||||
{
|
{
|
||||||
return optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
|
return optionsBuilder.UseMySQL(connectionString);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PrepareCommand(MySqlConnection conn, MySqlCommand cmd, string query)
|
private void PrepareCommand(MySqlConnection conn, MySqlCommand cmd, string query)
|
||||||
|
|||||||
@@ -78,9 +78,6 @@ namespace Oqtane.Infrastructure
|
|||||||
case "5.2.1":
|
case "5.2.1":
|
||||||
Upgrade_5_2_1(tenant, scope);
|
Upgrade_5_2_1(tenant, scope);
|
||||||
break;
|
break;
|
||||||
case "6.1.0":
|
|
||||||
Upgrade_6_1_0(tenant, scope);
|
|
||||||
break;
|
|
||||||
case "6.1.1":
|
case "6.1.1":
|
||||||
Upgrade_6_1_1(tenant, scope);
|
Upgrade_6_1_1(tenant, scope);
|
||||||
break;
|
break;
|
||||||
@@ -93,6 +90,9 @@ namespace Oqtane.Infrastructure
|
|||||||
case "6.2.1":
|
case "6.2.1":
|
||||||
Upgrade_6_2_1(tenant, scope);
|
Upgrade_6_2_1(tenant, scope);
|
||||||
break;
|
break;
|
||||||
|
case "10.0.4":
|
||||||
|
Upgrade_10_0_4(tenant, scope);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -447,16 +447,6 @@ namespace Oqtane.Infrastructure
|
|||||||
AddPagesToSites(scope, tenant, pageTemplates);
|
AddPagesToSites(scope, tenant, pageTemplates);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Upgrade_6_1_0(Tenant tenant, IServiceScope scope)
|
|
||||||
{
|
|
||||||
// remove MySql.EntityFrameworkCore package (replaced by Pomelo.EntityFrameworkCore.MySql)
|
|
||||||
string[] assemblies = {
|
|
||||||
"MySql.EntityFrameworkCore.dll"
|
|
||||||
};
|
|
||||||
|
|
||||||
RemoveAssemblies(tenant, assemblies, "6.1.0");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Upgrade_6_1_1(Tenant tenant, IServiceScope scope)
|
private void Upgrade_6_1_1(Tenant tenant, IServiceScope scope)
|
||||||
{
|
{
|
||||||
var localizer = scope.ServiceProvider.GetRequiredService<IStringLocalizer<AdminSiteTemplate>>();
|
var localizer = scope.ServiceProvider.GetRequiredService<IStringLocalizer<AdminSiteTemplate>>();
|
||||||
@@ -602,6 +592,16 @@ namespace Oqtane.Infrastructure
|
|||||||
RemoveFiles(tenant, files, "6.2.1");
|
RemoveFiles(tenant, files, "6.2.1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Upgrade_10_0_4(Tenant tenant, IServiceScope scope)
|
||||||
|
{
|
||||||
|
// remove Pomelo.EntityFrameworkCore.MySql package (replaced by MySql.EntityFrameworkCore)
|
||||||
|
string[] assemblies = {
|
||||||
|
"Pomelo.EntityFrameworkCore.MySql.dll"
|
||||||
|
};
|
||||||
|
|
||||||
|
RemoveAssemblies(tenant, assemblies, "10.0.4");
|
||||||
|
}
|
||||||
|
|
||||||
private void AddPagesToSites(IServiceScope scope, Tenant tenant, List<PageTemplate> pageTemplates)
|
private void AddPagesToSites(IServiceScope scope, Tenant tenant, List<PageTemplate> pageTemplates)
|
||||||
{
|
{
|
||||||
var tenants = scope.ServiceProvider.GetRequiredService<ITenantManager>();
|
var tenants = scope.ServiceProvider.GetRequiredService<ITenantManager>();
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<!-- MySQL Database Provider Dependencies -->
|
<!-- MySQL Database Provider Dependencies -->
|
||||||
<PackageReference Include="MySql.Data" Version="9.5.0" />
|
<PackageReference Include="MySql.Data" Version="9.5.0" />
|
||||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0" />
|
<PackageReference Include="MySql.EntityFrameworkCore" Version="10.0.0-rc" />
|
||||||
<!-- PostgreSQL Database Provider Dependencies -->
|
<!-- PostgreSQL Database Provider Dependencies -->
|
||||||
<PackageReference Include="EFCore.NamingConventions" Version="10.0.0-rc.2" />
|
<PackageReference Include="EFCore.NamingConventions" Version="10.0.0-rc.2" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.0" />
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.0" />
|
||||||
|
|||||||
@@ -43,14 +43,6 @@ namespace Oqtane.Repository
|
|||||||
{
|
{
|
||||||
optionsBuilder.ReplaceService<IMigrationsAssembly, MultiDatabaseMigrationsAssembly>();
|
optionsBuilder.ReplaceService<IMigrationsAssembly, MultiDatabaseMigrationsAssembly>();
|
||||||
|
|
||||||
// specify the SchemaVersion for .NET Identity as it is not being persisted when using AddIdentityCore()
|
|
||||||
var services = new ServiceCollection();
|
|
||||||
services.AddIdentityCore<IdentityUser>(options =>
|
|
||||||
{
|
|
||||||
options.Stores.SchemaVersion = IdentitySchemaVersions.Version3;
|
|
||||||
});
|
|
||||||
optionsBuilder.UseApplicationServiceProvider(services.BuildServiceProvider());
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(_connectionString))
|
if (string.IsNullOrEmpty(_connectionString))
|
||||||
{
|
{
|
||||||
Tenant tenant = _tenantManager.GetTenant();
|
Tenant tenant = _tenantManager.GetTenant();
|
||||||
@@ -75,6 +67,22 @@ namespace Oqtane.Repository
|
|||||||
ActiveDatabase = Activator.CreateInstance(type) as IDatabase;
|
ActiveDatabase = Activator.CreateInstance(type) as IDatabase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// specify the SchemaVersion for .NET Identity as it is not being persisted when using AddIdentityCore()
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddIdentityCore<IdentityUser>(options =>
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(_databaseType) && _databaseType.ToLower().Contains("mysql"))
|
||||||
|
{
|
||||||
|
// MySQL does not support some of the newer features of .NET Identity (ie. Passkeys)
|
||||||
|
options.Stores.SchemaVersion = IdentitySchemaVersions.Version2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
options.Stores.SchemaVersion = IdentitySchemaVersions.Version3;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
optionsBuilder.UseApplicationServiceProvider(services.BuildServiceProvider());
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(_connectionString) && ActiveDatabase != null)
|
if (!string.IsNullOrEmpty(_connectionString) && ActiveDatabase != null)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseOqtaneDatabase(ActiveDatabase, _connectionString);
|
optionsBuilder.UseOqtaneDatabase(ActiveDatabase, _connectionString);
|
||||||
|
|||||||
Reference in New Issue
Block a user