Merge branch 'oqtane:dev' into dev

This commit is contained in:
iJungleboy 2021-05-21 18:30:03 +02:00
commit f533279dec
81 changed files with 434 additions and 143 deletions

4
.gitignore vendored
View File

@ -7,6 +7,7 @@ msbuild.binlog
.vscode/ .vscode/
*.binlog *.binlog
*.nupkg *.nupkg
*.nupkg.bak
*.idea *.idea
@ -17,3 +18,6 @@ Oqtane.Server/Data/*.db
/Oqtane.Server/Properties/PublishProfiles/FolderProfile.pubxml /Oqtane.Server/Properties/PublishProfiles/FolderProfile.pubxml
Oqtane.Server/Content Oqtane.Server/Content
Oqtane.Server/wwwroot/Packages/**/assets.json

View File

@ -175,6 +175,7 @@
var config = new InstallConfig var config = new InstallConfig
{ {
DatabaseType = database.DBType, DatabaseType = database.DBType,
DatabasePackage = database.Package,
ConnectionString = connectionString, ConnectionString = connectionString,
Aliases = uri.Authority, Aliases = uri.Authority,
HostEmail = _hostEmail, HostEmail = _hostEmail,

View File

@ -306,6 +306,7 @@ else
{ {
config.TenantName = _tenantName; config.TenantName = _tenantName;
config.DatabaseType = database.DBType; config.DatabaseType = database.DBType;
config.DatabasePackage = database.Package;
config.ConnectionString = connectionString; config.ConnectionString = connectionString;
config.HostEmail = user.Email; config.HostEmail = user.Email;
config.HostPassword = _hostpassword; config.HostPassword = _hostpassword;

View File

@ -4,6 +4,7 @@ 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 MySql.EntityFrameworkCore.Metadata;
using Oqtane.Databases;
using Oqtane.Shared; using Oqtane.Shared;
namespace Oqtane.Database.MySQL namespace Oqtane.Database.MySQL
@ -14,21 +15,15 @@ namespace Oqtane.Database.MySQL
private static string _name => "MySQL"; private static string _name => "MySQL";
private readonly static string _typeName;
static MySQLDatabase() static MySQLDatabase()
{ {
var typeQualifiedName = typeof(MySQLDatabase).AssemblyQualifiedName; Initialize(typeof(MySQLDatabase));
_typeName = typeQualifiedName.Substring(0, typeQualifiedName.IndexOf(", Version"));
} }
public MySQLDatabase() :base(_name, _friendlyName) { } public MySQLDatabase() :base(_name, _friendlyName) { }
public override string Provider => "MySql.EntityFrameworkCore"; public override string Provider => "MySql.EntityFrameworkCore";
public override string TypeName => _typeName;
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);

View File

@ -2,7 +2,20 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<LangVersion>9</LangVersion> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.0.0</Version>
<NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
<PackageName>$(MSBuildProjectName).$(Version).nupkg</PackageName>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin</OutputPath>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -10,7 +23,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Oqtane.Shared\Oqtane.Shared.csproj" /> <ProjectReference Include="..\Oqtane.Server\Oqtane.Server.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy SourceFiles="$(OutputPath)..\$(PackageName)" DestinationFiles="..\Oqtane.Server\wwwroot\Packages\$(PackageName).bak" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Oqtane.Database.MySQL</id>
<version>1.0.0</version>
<authors>Shaun Walker</authors>
<owners>.NET Foundation</owners>
<title>Oqtane MySQL Provider</title>
<description>Add support for MySQL to the Oqtane Framework</description>
<copyright>.NET Foundation</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<projectUrl>https://github.com/oqtane/oqtane.framework</projectUrl>
<iconUrl>https://www.oqtane.org/Portals/0/icon.jpg</iconUrl>
<tags>oqtane</tags>
<releaseNotes>https://github.com/oqtane/oqtane.framework/releases/tag/v2.0.2</releaseNotes>
<summary>Add support for MySQL to the Oqtane Framework</summary>
</metadata>
<files>
<file src="bin\net5.0\Oqtane.Database.MySQL.dll" target="lib\net5.0" />
<file src="bin\net5.0\Oqtane.Database.MySQL.pdb" target="lib\net5.0" />
<file src="bin\net5.0\Mysql.EntityFrameworkCore.dll" target="lib\net5.0" />
<file src="bin\net5.0\Mysql.Data.dll" target="lib\net5.0" />
</files>
</package>

View File

@ -1,8 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<LangVersion>9</LangVersion>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.0.0</Version>
<NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
<PackageName>$(MSBuildProjectName).$(Version).nupkg</PackageName>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin</OutputPath>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -12,7 +25,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Oqtane.Shared\Oqtane.Shared.csproj" /> <ProjectReference Include="..\Oqtane.Server\Oqtane.Server.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy SourceFiles="$(OutputPath)..\$(PackageName)" DestinationFiles="..\Oqtane.Server\wwwroot\Packages\$(PackageName).bak" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Oqtane.Database.PostgreSQL</id>
<version>1.0.0</version>
<authors>Shaun Walker</authors>
<owners>.NET Foundation</owners>
<title>Oqtane PostgreSQL Provider</title>
<description>Add support for PostgreSQL to the Oqtane Framework</description>
<copyright>.NET Foundation</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<projectUrl>https://github.com/oqtane/oqtane.framework</projectUrl>
<iconUrl>https://www.oqtane.org/Portals/0/icon.jpg</iconUrl>
<tags>oqtane</tags>
<releaseNotes>https://github.com/oqtane/oqtane.framework/releases/tag/v2.0.2</releaseNotes>
<summary>Add support for PostgreSQL to the Oqtane Framework</summary>
</metadata>
<files>
<file src="bin\net5.0\Oqtane.Database.PostgreSQL.dll" target="lib\net5.0" />
<file src="bin\net5.0\Oqtane.Database.PostgreSQL.pdb" target="lib\net5.0" />
<file src="bin\net5.0\EFCore.NamingConventions.dll" target="lib\net5.0" />
<file src="bin\net5.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll" target="lib\net5.0" />
<file src="bin\net5.0\Npgsql.dll" target="lib\net5.0" />
</files>
</package>

View File

@ -7,6 +7,7 @@ using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Npgsql; using Npgsql;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Oqtane.Databases;
using Oqtane.Shared; using Oqtane.Shared;
namespace Oqtane.Database.PostgreSQL namespace Oqtane.Database.PostgreSQL
@ -17,15 +18,11 @@ namespace Oqtane.Database.PostgreSQL
private static string _name => "PostgreSQL"; private static string _name => "PostgreSQL";
private readonly static string _typeName;
private readonly INameRewriter _rewriter; private readonly INameRewriter _rewriter;
static PostgreSQLDatabase() static PostgreSQLDatabase()
{ {
var typeQualifiedName = typeof(PostgreSQLDatabase).AssemblyQualifiedName; Initialize(typeof(PostgreSQLDatabase));
_typeName = typeQualifiedName.Substring(0, typeQualifiedName.IndexOf(", Version"));
} }
public PostgreSQLDatabase() : base(_name, _friendlyName) public PostgreSQLDatabase() : base(_name, _friendlyName)
@ -35,8 +32,6 @@ namespace Oqtane.Database.PostgreSQL
public override string Provider => "Npgsql.EntityFrameworkCore.PostgreSQL"; public override string Provider => "Npgsql.EntityFrameworkCore.PostgreSQL";
public override string TypeName => _typeName;
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("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityAlwaysColumn); return table.Column<int>(name: name, nullable: false).Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityAlwaysColumn);

View File

@ -5,17 +5,11 @@ namespace Oqtane.Database.SqlServer
private static string _friendlyName => "Local Database"; private static string _friendlyName => "Local Database";
private static string _name => "LocalDB"; private static string _name => "LocalDB";
private readonly static string _typeName;
static LocalDbDatabase() static LocalDbDatabase()
{ {
var typeQualifiedName = typeof(LocalDbDatabase).AssemblyQualifiedName; Initialize(typeof(LocalDbDatabase));
_typeName = typeQualifiedName.Substring(0, typeQualifiedName.IndexOf(", Version"));
} }
public LocalDbDatabase() :base(_name, _friendlyName) { } public LocalDbDatabase() :base(_name, _friendlyName) { }
public override string TypeName => _typeName;
} }
} }

View File

@ -2,6 +2,20 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.0.0</Version>
<NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
<PackageName>$(MSBuildProjectName).$(Version).nupkg</PackageName>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin</OutputPath>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -9,7 +23,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Oqtane.Shared\Oqtane.Shared.csproj" /> <ProjectReference Include="..\Oqtane.Server\Oqtane.Server.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy SourceFiles="$(OutputPath)..\$(PackageName)" DestinationFiles="..\Oqtane.Server\wwwroot\Packages\$(PackageName).bak" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Oqtane.Database.SqlServer</id>
<version>1.0.0</version>
<authors>Shaun Walker</authors>
<owners>.NET Foundation</owners>
<title>Oqtane SqlServer Provider</title>
<description>Add support for SqlServer to the Oqtane Framework</description>
<copyright>.NET Foundation</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<projectUrl>https://github.com/oqtane/oqtane.framework</projectUrl>
<iconUrl>https://www.oqtane.org/Portals/0/icon.jpg</iconUrl>
<tags>oqtane</tags>
<releaseNotes>https://github.com/oqtane/oqtane.framework/releases/tag/v2.0.2</releaseNotes>
<summary>Add support for SqlServer to the Oqtane Framework</summary>
</metadata>
<files>
<file src="bin\net5.0\Oqtane.Database.SqlServer.dll" target="lib\net5.0" />
<file src="bin\net5.0\Oqtane.Database.SqlServer.pdb" target="lib\net5.0" />
<file src="bin\net5.0\Microsoft.EntityFrameworkCore.SqlServer.dll" target="lib\net5.0" />
</files>
</package>

View File

@ -6,17 +6,11 @@ namespace Oqtane.Database.SqlServer
private static string _name => "SqlServer"; private static string _name => "SqlServer";
private readonly static string _typeName;
static SqlServerDatabase() static SqlServerDatabase()
{ {
var typeQualifiedName = typeof(SqlServerDatabase).AssemblyQualifiedName; Initialize(typeof(SqlServerDatabase));
_typeName = typeQualifiedName.Substring(0, typeQualifiedName.IndexOf(", Version"));
} }
public SqlServerDatabase() : base(_name, _friendlyName) { } public SqlServerDatabase() : base(_name, _friendlyName) { }
public override string TypeName => _typeName;
} }
} }

View File

@ -4,6 +4,7 @@ using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases;
using Oqtane.Shared; using Oqtane.Shared;
namespace Oqtane.Database.SqlServer namespace Oqtane.Database.SqlServer

View File

@ -2,6 +2,20 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.0.0</Version>
<NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
<PackageName>$(MSBuildProjectName).$(Version).nupkg</PackageName>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin</OutputPath>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -9,7 +23,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Oqtane.Shared\Oqtane.Shared.csproj" /> <ProjectReference Include="..\Oqtane.Server\Oqtane.Server.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy SourceFiles="$(OutputPath)..\$(PackageName)" DestinationFiles="..\Oqtane.Server\wwwroot\Packages\$(PackageName).bak" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Oqtane.Database.Sqlite</id>
<version>1.0.0</version>
<authors>Shaun Walker</authors>
<owners>.NET Foundation</owners>
<title>Oqtane Sqlite Provider</title>
<description>Add support for Sqlite to the Oqtane Framework</description>
<copyright>.NET Foundation</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<projectUrl>https://github.com/oqtane/oqtane.framework</projectUrl>
<iconUrl>https://www.oqtane.org/Portals/0/icon.jpg</iconUrl>
<tags>oqtane</tags>
<releaseNotes>https://github.com/oqtane/oqtane.framework/releases/tag/v2.0.2</releaseNotes>
<summary>Add support for Sqlite to the Oqtane Framework</summary>
</metadata>
<files>
<file src="bin\net5.0\Oqtane.Database.Sqlite.dll" target="lib\net5.0" />
<file src="bin\net5.0\Oqtane.Database.Sqlite.pdb" target="lib\net5.0" />
<file src="bin\net5.0\Microsoft.EntityFrameworkCore.Sqlite.dll" target="lib\net5.0" />
</files>
</package>

View File

@ -4,6 +4,7 @@ using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases;
using Oqtane.Shared; using Oqtane.Shared;
namespace Oqtane.Database.Sqlite namespace Oqtane.Database.Sqlite
@ -14,21 +15,15 @@ namespace Oqtane.Database.Sqlite
private static string _name => "Sqlite"; private static string _name => "Sqlite";
private readonly static string _typeName;
static SqliteDatabase() static SqliteDatabase()
{ {
var typeQualifiedName = typeof(SqliteDatabase).AssemblyQualifiedName; Initialize(typeof(SqliteDatabase));
_typeName = typeQualifiedName.Substring(0, typeQualifiedName.IndexOf(", Version"));
} }
public SqliteDatabase() :base(_name, _friendlyName) { } public SqliteDatabase() :base(_name, _friendlyName) { }
public override string Provider => "Microsoft.EntityFrameworkCore.Sqlite"; public override string Provider => "Microsoft.EntityFrameworkCore.Sqlite";
public override string TypeName => _typeName;
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("Sqlite:Autoincrement", true); return table.Column<int>(name: name, nullable: false).Annotation("Sqlite:Autoincrement", true);

View File

@ -20,35 +20,40 @@ namespace Oqtane.Controllers
Name = "LocalDB", Name = "LocalDB",
FriendlyName = "Local Database", FriendlyName = "Local Database",
ControlType = "Oqtane.Installer.Controls.LocalDBConfig, Oqtane.Client", ControlType = "Oqtane.Installer.Controls.LocalDBConfig, Oqtane.Client",
DBType = "Oqtane.Database.SqlServer.LocalDbDatabase, Oqtane.Database.SqlServer" DBType = "Oqtane.Database.SqlServer.LocalDbDatabase, Oqtane.Database.SqlServer",
Package = "Oqtane.Database.SqlServer"
}, },
new() new()
{ {
Name = "SqlServer", Name = "SqlServer",
FriendlyName = "SQL Server", FriendlyName = "SQL Server",
ControlType = "Oqtane.Installer.Controls.SqlServerConfig, Oqtane.Client", ControlType = "Oqtane.Installer.Controls.SqlServerConfig, Oqtane.Client",
DBType = "Oqtane.Database.SqlServer.SqlServerDatabase, Oqtane.Database.SqlServer" DBType = "Oqtane.Database.SqlServer.SqlServerDatabase, Oqtane.Database.SqlServer",
Package = "Oqtane.Database.SqlServer"
}, },
new() new()
{ {
Name = "Sqlite", Name = "Sqlite",
FriendlyName = "Sqlite", FriendlyName = "Sqlite",
ControlType = "Oqtane.Installer.Controls.SqliteConfig, Oqtane.Client", ControlType = "Oqtane.Installer.Controls.SqliteConfig, Oqtane.Client",
DBType = "Oqtane.Database.Sqlite.SqliteDatabase, Oqtane.Database.Sqlite" DBType = "Oqtane.Database.Sqlite.SqliteDatabase, Oqtane.Database.Sqlite",
Package = "Oqtane.Database.Sqlite"
}, },
new() new()
{ {
Name = "MySQL", Name = "MySQL",
FriendlyName = "MySQL", FriendlyName = "MySQL",
ControlType = "Oqtane.Installer.Controls.MySQLConfig, Oqtane.Client", ControlType = "Oqtane.Installer.Controls.MySQLConfig, Oqtane.Client",
DBType = "Oqtane.Database.MySQL.MySQLDatabase, Oqtane.Database.MySQL" DBType = "Oqtane.Database.MySQL.MySQLDatabase, Oqtane.Database.MySQL",
Package = "Oqtane.Database.MySQL"
}, },
new() new()
{ {
Name = "PostgreSQL", Name = "PostgreSQL",
FriendlyName = "PostgreSQL", FriendlyName = "PostgreSQL",
ControlType = "Oqtane.Installer.Controls.PostGreSQLConfig, Oqtane.Client", ControlType = "Oqtane.Installer.Controls.PostgreSQLConfig, Oqtane.Client",
DBType = "Oqtane.Database.PostgreSQL.PostgreSQLDatabase, Oqtane.Database.PostgreSQL" DBType = "Oqtane.Database.PostgreSQL.PostgreSQLDatabase, Oqtane.Database.PostgreSQL",
Package = "Oqtane.Database.PostgreSQL"
} }
}; };
return databases; return databases;

View File

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
namespace Oqtane.Repository.Databases.Interfaces namespace Oqtane.Repository.Databases.Interfaces

View File

@ -1,14 +1,14 @@
using System.Collections.Generic;
using System.Data; using System.Data;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Models;
namespace Oqtane.Interfaces namespace Oqtane.Databases.Interfaces
{ {
public interface IOqtaneDatabase public interface IOqtaneDatabase
{ {
public string AssemblyName { get; }
public string FriendlyName { get; } public string FriendlyName { get; }
public string Name { get; } public string Name { get; }

View File

@ -1,29 +1,43 @@
using System; using System;
using System.Collections.Generic;
using System.Data; using System.Data;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Interfaces; using Oqtane.Databases.Interfaces;
using Oqtane.Models;
namespace Oqtane.Shared namespace Oqtane.Databases
{ {
public abstract class OqtaneDatabaseBase : IOqtaneDatabase public abstract class OqtaneDatabaseBase : IOqtaneDatabase
{ {
private static string _assemblyName;
private static string _typeName;
protected OqtaneDatabaseBase(string name, string friendlyName) protected OqtaneDatabaseBase(string name, string friendlyName)
{ {
Name = name; Name = name;
FriendlyName = friendlyName; FriendlyName = friendlyName;
} }
protected static void Initialize(Type type)
{
var typeQualifiedName = type.AssemblyQualifiedName;
var assembly = type.Assembly;
var assemblyName = assembly.FullName;
_typeName = typeQualifiedName.Substring(0, typeQualifiedName.IndexOf(", Version"));
_assemblyName = assemblyName.Substring(0, assemblyName.IndexOf(", Version"));
}
public string AssemblyName => _assemblyName;
public string FriendlyName { get; } public string FriendlyName { get; }
public string Name { get; } public string Name { get; }
public abstract string Provider { get; } public abstract string Provider { get; }
public abstract string TypeName { get; } public string TypeName => _typeName;
public abstract OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name); public abstract OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name);

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable ConvertToUsingDeclaration // ReSharper disable ConvertToUsingDeclaration

View File

@ -101,26 +101,7 @@ namespace Microsoft.Extensions.DependencyInjection
if (!assemblies.Any(a => AssemblyName.ReferenceMatchesDefinition(assemblyName, a.GetName()))) if (!assemblies.Any(a => AssemblyName.ReferenceMatchesDefinition(assemblyName, a.GetName())))
{ {
try AssemblyLoadContext.Default.LoadOqtaneAssembly(dll, assemblyName);
{
var pdb = Path.ChangeExtension(dll.FullName, ".pdb");
Assembly assembly = null;
// load assembly ( and symbols ) from stream to prevent locking files ( as long as dependencies are in /bin they will load as well )
if (File.Exists(pdb))
{
assembly = AssemblyLoadContext.Default.LoadFromStream(new MemoryStream(File.ReadAllBytes(dll.FullName)), new MemoryStream(File.ReadAllBytes(pdb)));
}
else
{
assembly = AssemblyLoadContext.Default.LoadFromStream(new MemoryStream(File.ReadAllBytes(dll.FullName)));
}
Console.WriteLine($"Loaded : {assemblyName}");
}
catch (Exception e)
{
Console.WriteLine($"Failed : {assemblyName}\n{e}");
}
} }
} }
} }

View File

@ -3,12 +3,15 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.Loader;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json; using Newtonsoft.Json;
using Oqtane.Databases.Interfaces;
using Oqtane.Extensions; using Oqtane.Extensions;
using Oqtane.Models; using Oqtane.Models;
using Oqtane.Repository; using Oqtane.Repository;
@ -28,14 +31,14 @@ namespace Oqtane.Infrastructure
{ {
private readonly IConfigurationRoot _config; private readonly IConfigurationRoot _config;
private readonly IServiceScopeFactory _serviceScopeFactory; private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly IWebHostEnvironment _environment;
private readonly IMemoryCache _cache; private readonly IMemoryCache _cache;
private IOqtaneDatabase _database; public DatabaseManager(IConfigurationRoot config, IServiceScopeFactory serviceScopeFactory, IWebHostEnvironment environment, IMemoryCache cache)
public DatabaseManager(IConfigurationRoot config, IServiceScopeFactory serviceScopeFactory, IMemoryCache cache)
{ {
_config = config; _config = config;
_serviceScopeFactory = serviceScopeFactory; _serviceScopeFactory = serviceScopeFactory;
_environment = environment;
_cache = cache; _cache = cache;
} }
@ -175,6 +178,45 @@ namespace Oqtane.Infrastructure
return result; return result;
} }
private Installation InstallDatabase(InstallConfig install)
{
var result = new Installation {Success = false, Message = string.Empty};
try
{
//Rename bak extension
var packageFolderName = "Packages";
var webRootPath = _environment.WebRootPath;
var packagesFolder = new DirectoryInfo(Path.Combine(webRootPath, packageFolderName));
// iterate through Nuget packages in source folder
foreach (var package in packagesFolder.GetFiles("*.nupkg.bak"))
{
if (package.Name.StartsWith(install.DatabasePackage))
{
//rename file
var packageName = Path.Combine(package.DirectoryName, package.Name);
packageName = packageName.Substring(0, packageName.IndexOf(".bak"));
package.MoveTo(packageName, true);
}
}
//Call InstallationManager to install Database Package
using (var scope = _serviceScopeFactory.CreateScope())
{
var installationManager = scope.ServiceProvider.GetRequiredService<IInstallationManager>();
installationManager.InstallPackages(packageFolderName);
result.Success = true;
}
}
catch (Exception ex)
{
result.Message = ex.Message;
}
return result;
}
private Installation CreateDatabase(InstallConfig install) private Installation CreateDatabase(InstallConfig install)
{ {
var result = new Installation { Success = false, Message = string.Empty }; var result = new Installation { Success = false, Message = string.Empty };
@ -183,11 +225,32 @@ namespace Oqtane.Infrastructure
{ {
try try
{ {
var databaseType = install.DatabaseType;
//Get database Type
var type = Type.GetType(databaseType);
//Deploy the database components (if necessary)
if (type == null)
{
InstallDatabase(install);
var assemblyPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
var assembliesFolder = new DirectoryInfo(assemblyPath);
var assemblyFile = new FileInfo($"{assembliesFolder}/{install.DatabasePackage}.dll");
AssemblyLoadContext.Default.LoadOqtaneAssembly(assemblyFile);
type = Type.GetType(databaseType);
}
//Create database object from Type
var database = Activator.CreateInstance(type) as IOqtaneDatabase;
//create data directory if does not exist //create data directory if does not exist
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString(); var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString();
if (!Directory.Exists(dataDirectory)) Directory.CreateDirectory(dataDirectory ?? String.Empty); if (!Directory.Exists(dataDirectory)) Directory.CreateDirectory(dataDirectory ?? String.Empty);
var dbOptions = new DbContextOptionsBuilder().UseOqtaneDatabase(install.Database, NormalizeConnectionString(install.ConnectionString)).Options; var dbOptions = new DbContextOptionsBuilder().UseOqtaneDatabase(database, NormalizeConnectionString(install.ConnectionString)).Options;
using (var dbc = new DbContext(dbOptions)) using (var dbc = new DbContext(dbOptions))
{ {
// create empty database if it does not exist // create empty database if it does not exist
@ -585,14 +648,15 @@ namespace Oqtane.Infrastructure
{ {
var connectionString = _config.GetConnectionString(SettingKeys.ConnectionStringKey); var connectionString = _config.GetConnectionString(SettingKeys.ConnectionStringKey);
var databaseType = _config.GetSection(SettingKeys.DatabaseSection)[SettingKeys.DatabaseTypeKey]; var databaseType = _config.GetSection(SettingKeys.DatabaseSection)[SettingKeys.DatabaseTypeKey];
IOqtaneDatabase database = null;
if (!String.IsNullOrEmpty(databaseType)) IOqtaneDatabase database = null;
if (!string.IsNullOrEmpty(databaseType))
{ {
var type = Type.GetType(databaseType); var type = Type.GetType(databaseType);
database = Activator.CreateInstance(type) as IOqtaneDatabase; database = Activator.CreateInstance(type) as IOqtaneDatabase;
} }
return new InstallationContext(database, connectionString); return new InstallationContext(database, connectionString);
} }

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;
@ -58,7 +59,7 @@ namespace Oqtane.Migrations
migrationBuilder.Sql($@" migrationBuilder.Sql($@"
INSERT INTO {appVersions}({version}, {appledDate}) INSERT INTO {appVersions}({version}, {appledDate})
VALUES('02.01.00', '{DateTime.UtcNow:u}') VALUES('02.01.00', '{DateTime.UtcNow.ToString("yyyy'-'MM'-'dd HH':'mm':'ss")}')
"); ");
} }

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,5 +1,6 @@
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;
using Oqtane.Repository; using Oqtane.Repository;

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
namespace Oqtane.Migrations.EntityBuilders namespace Oqtane.Migrations.EntityBuilders

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable UnusedAutoPropertyAccessor.Global

View File

@ -4,6 +4,7 @@ using System.Linq;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable BuiltInTypeReferenceStyleForMemberAccess // ReSharper disable BuiltInTypeReferenceStyleForMemberAccess

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable UnusedAutoPropertyAccessor.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable UnusedAutoPropertyAccessor.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global

View File

@ -1,14 +1,13 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
namespace Oqtane.Migrations namespace Oqtane.Migrations
{ {
public abstract class MultiDatabaseMigration : Migration public abstract class MultiDatabaseMigration : Migration
{ {
private readonly IOqtaneDatabase _databases;
protected MultiDatabaseMigration(IOqtaneDatabase database) protected MultiDatabaseMigration(IOqtaneDatabase database)
{ {
ActiveDatabase = database; ActiveDatabase = database;

View File

@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Internal; using Microsoft.EntityFrameworkCore.Migrations.Internal;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Repository.Databases.Interfaces; using Oqtane.Repository.Databases.Interfaces;

View File

@ -61,11 +61,15 @@ namespace Oqtane.Modules.HtmlText.Manager
public bool Install(Tenant tenant, string version) public bool Install(Tenant tenant, string version)
{ {
_tenantManager.SetTenant(tenant.TenantId);
return Migrate(new HtmlTextContext(_tenantManager, _accessor), tenant, MigrationType.Up); return Migrate(new HtmlTextContext(_tenantManager, _accessor), tenant, MigrationType.Up);
} }
public bool Uninstall(Tenant tenant) public bool Uninstall(Tenant tenant)
{ {
_tenantManager.SetTenant(tenant.TenantId);
return Migrate(new HtmlTextContext(_tenantManager, _accessor), tenant, MigrationType.Down); return Migrate(new HtmlTextContext(_tenantManager, _accessor), tenant, MigrationType.Down);
} }
} }

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations; using Oqtane.Migrations;
using Oqtane.Modules.HtmlText.Migrations.EntityBuilders; using Oqtane.Modules.HtmlText.Migrations.EntityBuilders;

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations; using Oqtane.Migrations;
using Oqtane.Migrations.EntityBuilders; using Oqtane.Migrations.EntityBuilders;

View File

@ -32,21 +32,20 @@
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="5.0.4" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.4" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.4" /> <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.4" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.0.1" />
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="5.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.4"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.4">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.4" /> <PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.4" />
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.0.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
<PackageReference Include="System.Drawing.Common" Version="5.0.2" /> <PackageReference Include="System.Drawing.Common" Version="5.0.2" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Oqtane.Client\Oqtane.Client.csproj" /> <ProjectReference Include="..\Oqtane.Client\Oqtane.Client.csproj" />
<ProjectReference Include="..\Oqtane.Database.MySQL\Oqtane.Database.MySQL.csproj" />
<ProjectReference Include="..\Oqtane.Database.PostgreSQL\Oqtane.Database.PostgreSQL.csproj" />
<ProjectReference Include="..\Oqtane.Database.Sqlite\Oqtane.Database.Sqlite.csproj" />
<ProjectReference Include="..\Oqtane.Database.SqlServer\Oqtane.Database.SqlServer.csproj" />
<ProjectReference Include="..\Oqtane.Shared\Oqtane.Shared.csproj" /> <ProjectReference Include="..\Oqtane.Shared\Oqtane.Shared.csproj" />
<ProjectReference Include="..\Oqtane.Upgrade\Oqtane.Upgrade.csproj" /> <ProjectReference Include="..\Oqtane.Upgrade\Oqtane.Upgrade.csproj" />
</ItemGroup> </ItemGroup>

View File

@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Oqtane.Databases.Interfaces;
using Oqtane.Extensions; using Oqtane.Extensions;
using Oqtane.Infrastructure; using Oqtane.Infrastructure;
using Oqtane.Interfaces; using Oqtane.Interfaces;

View File

@ -1,5 +1,6 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using Oqtane.Databases.Interfaces;
using Oqtane.Extensions; using Oqtane.Extensions;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Models; using Oqtane.Models;

View File

@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations;
using Oqtane.Models; using Oqtane.Models;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Oqtane.Databases.Interfaces;
using Oqtane.Extensions; using Oqtane.Extensions;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Migrations.Framework; using Oqtane.Migrations.Framework;

View File

@ -4,6 +4,7 @@ using System.Data;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using Oqtane.Databases.Interfaces;
using Oqtane.Interfaces; using Oqtane.Interfaces;
using Oqtane.Models; using Oqtane.Models;
// ReSharper disable ConvertToUsingDeclaration // ReSharper disable ConvertToUsingDeclaration

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.Loader;
using Oqtane.Modules; using Oqtane.Modules;
using Oqtane.Services; using Oqtane.Services;
using Oqtane.Shared; using Oqtane.Shared;
@ -72,6 +73,7 @@ namespace System.Reflection
{ {
return appDomain.GetAssemblies().Where(a => a.IsOqtaneAssembly()); return appDomain.GetAssemblies().Where(a => a.IsOqtaneAssembly());
} }
public static IEnumerable<Assembly> GetOqtaneClientAssemblies(this AppDomain appDomain) public static IEnumerable<Assembly> GetOqtaneClientAssemblies(this AppDomain appDomain)
{ {
return appDomain.GetOqtaneAssemblies() return appDomain.GetOqtaneAssemblies()
@ -88,5 +90,44 @@ namespace System.Reflection
{ {
return Attribute.IsDefined(type, typeof(OqtaneIgnoreAttribute)) || type.IsAbstract || type.IsGenericType; return Attribute.IsDefined(type, typeof(OqtaneIgnoreAttribute)) || type.IsAbstract || type.IsGenericType;
} }
public static void LoadOqtaneAssembly(this AssemblyLoadContext loadContext, FileInfo dll)
{
AssemblyName assemblyName = null;
try
{
assemblyName = AssemblyName.GetAssemblyName(dll.FullName);
}
catch
{
Console.WriteLine($"Not Assembly : {dll.Name}");
}
loadContext.LoadOqtaneAssembly(dll, assemblyName);
}
public static void LoadOqtaneAssembly(this AssemblyLoadContext loadContext, FileInfo dll, AssemblyName assemblyName)
{
try
{
var pdb = Path.ChangeExtension(dll.FullName, ".pdb");
Assembly assembly = null;
// load assembly ( and symbols ) from stream to prevent locking files ( as long as dependencies are in /bin they will load as well )
if (File.Exists(pdb))
{
assembly = loadContext.LoadFromStream(new MemoryStream(File.ReadAllBytes(dll.FullName)), new MemoryStream(File.ReadAllBytes(pdb)));
}
else
{
assembly = loadContext.LoadFromStream(new MemoryStream(File.ReadAllBytes(dll.FullName)));
}
Console.WriteLine($"Loaded : {assemblyName}");
}
catch (Exception e)
{
Console.WriteLine($"Failed : {assemblyName}\n{e}");
}
}
} }
} }

View File

@ -9,5 +9,7 @@ namespace Oqtane.Models
public string ControlType { get; set; } public string ControlType { get; set; }
public string DBType { get; set; } public string DBType { get; set; }
public string Package { get; set; }
} }
} }

View File

@ -1,29 +1,11 @@
using System;
using Oqtane.Interfaces;
namespace Oqtane.Shared namespace Oqtane.Shared
{ {
public class InstallConfig public class InstallConfig
{ {
private IOqtaneDatabase _database;
public string ConnectionString { get; set; } public string ConnectionString { get; set; }
public string DatabaseType { get; set; } public string DatabaseType { get; set; }
public string DatabasePackage { get; set; }
public IOqtaneDatabase Database
{
get
{
if (_database == null)
{
var type = Type.GetType(DatabaseType);
_database = Activator.CreateInstance(type) as IOqtaneDatabase;
}
return _database;
}
}
public string Aliases { get; set; } public string Aliases { get; set; }
public string TenantName { get; set; } public string TenantName { get; set; }
public bool IsNewTenant { get; set; } public bool IsNewTenant { get; set; }