Fix Upgrade issue with new componentized Database projects
This commit is contained in:
@ -48,9 +48,8 @@ namespace Oqtane.Infrastructure
|
||||
if (!string.IsNullOrEmpty(_config.GetConnectionString(SettingKeys.ConnectionStringKey)))
|
||||
{
|
||||
result.Success = true;
|
||||
using (var scope = _serviceScopeFactory.CreateScope())
|
||||
using (var db = GetInstallationContext())
|
||||
{
|
||||
var db = scope.ServiceProvider.GetRequiredService<MasterDBContext>();
|
||||
if (db.Database.CanConnect())
|
||||
{
|
||||
try
|
||||
@ -92,6 +91,15 @@ namespace Oqtane.Infrastructure
|
||||
IsNewTenant = false
|
||||
};
|
||||
|
||||
//If doing an Upgrade we may only have a connectionString. If that is the case - default databaseType to SqlServer
|
||||
if (!string.IsNullOrEmpty(install.ConnectionString) && string.IsNullOrEmpty(install.DatabaseType))
|
||||
{
|
||||
install.DatabaseType = "Oqtane.Database.SqlServer.SqlServerDatabase, Oqtane.Database.SqlServer";
|
||||
install.DatabasePackage = "Oqtane.Database.SqlServer";
|
||||
InstallDatabase(install);
|
||||
UpdateDatabaseType(install.DatabaseType);
|
||||
}
|
||||
|
||||
var installation = IsInstalled();
|
||||
if (!installation.Success)
|
||||
{
|
||||
@ -184,30 +192,46 @@ namespace Oqtane.Infrastructure
|
||||
|
||||
try
|
||||
{
|
||||
//Rename bak extension
|
||||
var packageFolderName = "Packages";
|
||||
var webRootPath = _environment.WebRootPath;
|
||||
var packagesFolder = new DirectoryInfo(Path.Combine(webRootPath, packageFolderName));
|
||||
var databaseType = install.DatabaseType;
|
||||
|
||||
// iterate through Nuget packages in source folder
|
||||
foreach (var package in packagesFolder.GetFiles("*.nupkg.bak"))
|
||||
//Get database Type
|
||||
var type = Type.GetType(databaseType);
|
||||
|
||||
//Deploy the database components (if necessary)
|
||||
if (type == null)
|
||||
{
|
||||
if (package.Name.StartsWith(install.DatabasePackage))
|
||||
//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"))
|
||||
{
|
||||
//rename file
|
||||
var packageName = Path.Combine(package.DirectoryName, package.Name);
|
||||
packageName = packageName.Substring(0, packageName.IndexOf(".bak"));
|
||||
package.MoveTo(packageName, true);
|
||||
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;
|
||||
}
|
||||
|
||||
var assemblyPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
|
||||
var assembliesFolder = new DirectoryInfo(assemblyPath);
|
||||
var assemblyFile = new FileInfo($"{assembliesFolder}/{install.DatabasePackage}.dll");
|
||||
|
||||
AssemblyLoadContext.Default.LoadOqtaneAssembly(assemblyFile);
|
||||
}
|
||||
|
||||
//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)
|
||||
{
|
||||
@ -225,24 +249,13 @@ namespace Oqtane.Infrastructure
|
||||
{
|
||||
try
|
||||
{
|
||||
InstallDatabase(install);
|
||||
|
||||
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 IDatabase;
|
||||
|
||||
@ -289,7 +302,7 @@ namespace Oqtane.Infrastructure
|
||||
|
||||
using (var masterDbContext = new MasterDBContext(new DbContextOptions<MasterDBContext>(), null, _config))
|
||||
{
|
||||
if (installation.Success && (install.DatabaseType == "SqlServer" || install.DatabaseType == "LocalDB"))
|
||||
if (installation.Success && (install.DatabaseType == "Oqtane.Database.SqlServer.SqlServerDatabase, Oqtane.Database.SqlServer"))
|
||||
{
|
||||
UpgradeSqlServer(sql, install.ConnectionString, install.DatabaseType, true);
|
||||
}
|
||||
|
Reference in New Issue
Block a user