diff --git a/Oqtane.Client/Oqtane.Client.csproj b/Oqtane.Client/Oqtane.Client.csproj
index fbae9656..2e86a59a 100644
--- a/Oqtane.Client/Oqtane.Client.csproj
+++ b/Oqtane.Client/Oqtane.Client.csproj
@@ -6,7 +6,7 @@
7.3
3.0
Debug;Release
- 0.0.9
+ 0.9.0
Oqtane
Shaun Walker
.NET Foundation
diff --git a/Oqtane.Client/Services/Interfaces/ISettingService.cs b/Oqtane.Client/Services/Interfaces/ISettingService.cs
index f7c06591..97c6266d 100644
--- a/Oqtane.Client/Services/Interfaces/ISettingService.cs
+++ b/Oqtane.Client/Services/Interfaces/ISettingService.cs
@@ -6,9 +6,9 @@ namespace Oqtane.Services
{
public interface ISettingService
{
- Task> GetHostSettingsAsync();
+ Task> GetTenantSettingsAsync();
- Task UpdateHostSettingsAsync(Dictionary hostSettings);
+ Task UpdateTenantSettingsAsync(Dictionary tenantSettings);
Task> GetSiteSettingsAsync(int siteId);
diff --git a/Oqtane.Client/Services/SettingService.cs b/Oqtane.Client/Services/SettingService.cs
index d966fb92..c1d96915 100644
--- a/Oqtane.Client/Services/SettingService.cs
+++ b/Oqtane.Client/Services/SettingService.cs
@@ -26,14 +26,14 @@ namespace Oqtane.Services
get { return CreateApiUrl(_siteState.Alias, _navigationManager.Uri, "Setting"); }
}
- public async Task> GetHostSettingsAsync()
+ public async Task> GetTenantSettingsAsync()
{
- return await GetSettingsAsync(EntityNames.Host, -1);
+ return await GetSettingsAsync(EntityNames.Tenant, -1);
}
- public async Task UpdateHostSettingsAsync(Dictionary hostSettings)
+ public async Task UpdateTenantSettingsAsync(Dictionary tenantSettings)
{
- await UpdateSettingsAsync(hostSettings, EntityNames.Host, -1);
+ await UpdateSettingsAsync(tenantSettings, EntityNames.Tenant, -1);
}
public async Task> GetSiteSettingsAsync(int siteId)
diff --git a/Oqtane.Package/Oqtane.Framework.nuspec b/Oqtane.Package/Oqtane.Framework.nuspec
index 20827508..b537a230 100644
--- a/Oqtane.Package/Oqtane.Framework.nuspec
+++ b/Oqtane.Package/Oqtane.Framework.nuspec
@@ -2,7 +2,7 @@
Oqtane.Framework
- 0.0.9
+ 0.9.0
Shaun Walker
.NET Foundation
Oqtane Framework
diff --git a/Oqtane.Server/Controllers/SettingController.cs b/Oqtane.Server/Controllers/SettingController.cs
index 2599fde7..44437344 100644
--- a/Oqtane.Server/Controllers/SettingController.cs
+++ b/Oqtane.Server/Controllers/SettingController.cs
@@ -123,7 +123,7 @@ namespace Oqtane.Controllers
}
switch (entityName)
{
- case EntityNames.Host:
+ case EntityNames.Tenant:
authorized = User.IsInRole(Constants.HostRole);
break;
case EntityNames.Site:
diff --git a/Oqtane.Server/Infrastructure/DatabaseManager.cs b/Oqtane.Server/Infrastructure/DatabaseManager.cs
index 863a8ce4..61b62589 100644
--- a/Oqtane.Server/Infrastructure/DatabaseManager.cs
+++ b/Oqtane.Server/Infrastructure/DatabaseManager.cs
@@ -26,7 +26,6 @@ namespace Oqtane.Infrastructure
private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly IMemoryCache _cache;
-
public DatabaseManager(IConfigurationRoot config, IServiceScopeFactory serviceScopeFactory, IMemoryCache cache)
{
_config = config;
@@ -217,7 +216,6 @@ namespace Oqtane.Infrastructure
if (result.Success)
{
- CreateApplicationVersion(install.ConnectionString);
UpdateConnectionString(install.ConnectionString);
}
}
@@ -277,21 +275,43 @@ namespace Oqtane.Infrastructure
{
var result = new Installation { Success = false, Message = string.Empty };
- using (var db = new InstallationContext(NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey))))
- {
- foreach (var tenant in db.Tenant.ToList())
- {
- var upgradeConfig = DeployChanges.To.SqlDatabase(NormalizeConnectionString(tenant.DBConnectionString))
- .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly(), s => s.Contains("Tenant") && s.EndsWith(".sql",StringComparison.OrdinalIgnoreCase));
+ string[] versions = Constants.ReleaseVersions.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
- var upgrade = upgradeConfig.Build();
- if (upgrade.IsUpgradeRequired())
+ using (var scope = _serviceScopeFactory.CreateScope())
+ {
+ var upgrades = scope.ServiceProvider.GetRequiredService();
+
+ using (var db = new InstallationContext(NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey))))
+ {
+ foreach (var tenant in db.Tenant.ToList())
{
- var upgradeResult = upgrade.PerformUpgrade();
- result.Success = upgradeResult.Successful;
- if (!result.Success)
+ var upgradeConfig = DeployChanges.To.SqlDatabase(NormalizeConnectionString(tenant.DBConnectionString))
+ .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly(), s => s.Contains("Tenant.") && s.EndsWith(".sql", StringComparison.OrdinalIgnoreCase));
+
+ var upgrade = upgradeConfig.Build();
+ if (upgrade.IsUpgradeRequired())
{
- result.Message = upgradeResult.Error.Message;
+ var upgradeResult = upgrade.PerformUpgrade();
+ result.Success = upgradeResult.Successful;
+ if (!result.Success)
+ {
+ result.Message = upgradeResult.Error.Message;
+ }
+ }
+
+ // execute any version specific upgrade logic
+ string version = tenant.Version;
+ int index = Array.FindIndex(versions, item => item == version);
+ if (index != (versions.Length - 1))
+ {
+ if (index == -1) index = 0;
+ for (int i = index; i < versions.Length; i++)
+ {
+ upgrades.Upgrade(tenant, versions[i]);
+ }
+ tenant.Version = versions[versions.Length - 1];
+ db.Entry(tenant).State = EntityState.Modified;
+ db.SaveChanges();
}
}
}
@@ -460,6 +480,9 @@ namespace Oqtane.Infrastructure
aliases.UpdateAlias(alias);
}
+ tenant.Version = Constants.Version;
+ tenants.UpdateTenant(tenant);
+
log.Log(site.SiteId, LogLevel.Trace, this, LogFunction.Create, "Site Created {Site}", site);
}
}
@@ -469,20 +492,6 @@ namespace Oqtane.Infrastructure
return result;
}
-
- private void CreateApplicationVersion(string connectionString)
- {
- using (var db = new InstallationContext(NormalizeConnectionString(connectionString)))
- {
- var version = db.ApplicationVersion.FirstOrDefault(item => item.Version == Constants.Version);
- if (version == null)
- {
- version = new ApplicationVersion { Version = Constants.Version, CreatedOn = DateTime.UtcNow };
- db.ApplicationVersion.Add(version);
- db.SaveChanges();
- }
- }
- }
private string NormalizeConnectionString(string connectionString)
{
diff --git a/Oqtane.Server/Infrastructure/Interfaces/IUpgradeManager.cs b/Oqtane.Server/Infrastructure/Interfaces/IUpgradeManager.cs
new file mode 100644
index 00000000..e941bbfd
--- /dev/null
+++ b/Oqtane.Server/Infrastructure/Interfaces/IUpgradeManager.cs
@@ -0,0 +1,9 @@
+using Oqtane.Models;
+
+namespace Oqtane.Infrastructure
+{
+ public interface IUpgradeManager
+ {
+ void Upgrade(Tenant tenant, string version);
+ }
+}
diff --git a/Oqtane.Server/Infrastructure/UpgradeManager.cs b/Oqtane.Server/Infrastructure/UpgradeManager.cs
new file mode 100644
index 00000000..2c538d97
--- /dev/null
+++ b/Oqtane.Server/Infrastructure/UpgradeManager.cs
@@ -0,0 +1,93 @@
+using Microsoft.Extensions.DependencyInjection;
+using Oqtane.Extensions;
+using Oqtane.Models;
+using Oqtane.Repository;
+using Oqtane.Shared;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Oqtane.Infrastructure
+{
+ public class UpgradeManager : IUpgradeManager
+ {
+ private readonly IAliasRepository _aliases;
+ private readonly IServiceScopeFactory _serviceScopeFactory;
+
+ public UpgradeManager(IAliasRepository aliases, IServiceScopeFactory serviceScopeFactory)
+ {
+ _aliases = aliases;
+ _serviceScopeFactory = serviceScopeFactory;
+ }
+
+ public void Upgrade(Tenant tenant, string version)
+ {
+ // core framework upgrade logic - note that you can check if current tenant is Master if you only want to execute logic once
+ var pageTemplates = new List();
+
+ switch (version)
+ {
+ case "0.9.0":
+ // add a page to all existing sites on upgrade
+
+ //pageTemplates.Add(new PageTemplate
+ //{
+ // Name = "Test",
+ // Parent = "",
+ // Path = "test",
+ // Icon = Icons.Badge,
+ // IsNavigation = true,
+ // IsPersonalizable = false,
+ // EditMode = false,
+ // PagePermissions = new List
+ // {
+ // new Permission(PermissionNames.View, Constants.AdminRole, true),
+ // new Permission(PermissionNames.View, Constants.AllUsersRole, true),
+ // new Permission(PermissionNames.Edit, Constants.AdminRole, true)
+ // }.EncodePermissions(),
+ // PageTemplateModules = new List
+ // {
+ // new PageTemplateModule
+ // {
+ // ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Login.Index).ToModuleDefinitionName(), Title = "Test", Pane = "Content",
+ // ModulePermissions = new List
+ // {
+ // new Permission(PermissionNames.View, Constants.AdminRole, true),
+ // new Permission(PermissionNames.View, Constants.AllUsersRole, true),
+ // new Permission(PermissionNames.Edit, Constants.AdminRole, true)
+ // }.EncodePermissions(),
+ // Content = ""
+ // }
+ // }
+ //});
+ CreateSitePages(tenant, pageTemplates);
+ break;
+ }
+ }
+
+ private void CreateSitePages(Tenant tenant, List pageTemplates)
+ {
+ if (pageTemplates.Count != 0)
+ {
+ var processed = new List();
+ foreach (Alias alias in _aliases.GetAliases().Where(item => item.TenantId == tenant.TenantId))
+ {
+ if (!processed.Exists(item => item.SiteId == alias.SiteId))
+ {
+ using (var scope = _serviceScopeFactory.CreateScope())
+ {
+ var siteState = scope.ServiceProvider.GetRequiredService();
+ siteState.Alias = alias;
+ var sites = scope.ServiceProvider.GetRequiredService();
+ var site = sites.GetSite(alias.SiteId);
+ if (site != null)
+ {
+ sites.CreatePages(site, pageTemplates);
+ }
+ processed.Add(site);
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Oqtane.Server/Oqtane.Server.csproj b/Oqtane.Server/Oqtane.Server.csproj
index 347e9fc0..43102d3c 100644
--- a/Oqtane.Server/Oqtane.Server.csproj
+++ b/Oqtane.Server/Oqtane.Server.csproj
@@ -4,7 +4,7 @@
netcoreapp3.1
7.3
Debug;Release
- 0.0.9
+ 0.9.0
Oqtane
Shaun Walker
.NET Foundation
@@ -20,10 +20,8 @@
-
-
-
-
+
+
diff --git a/Oqtane.Server/Repository/Context/InstallationContext.cs b/Oqtane.Server/Repository/Context/InstallationContext.cs
index 18694939..29bfc281 100644
--- a/Oqtane.Server/Repository/Context/InstallationContext.cs
+++ b/Oqtane.Server/Repository/Context/InstallationContext.cs
@@ -21,7 +21,5 @@ namespace Oqtane.Repository
public virtual DbSet Tenant { get; set; }
public virtual DbSet ModuleDefinition { get; set; }
public virtual DbSet Job { get; set; }
-
- public virtual DbSet ApplicationVersion { get; set; }
}
}
diff --git a/Oqtane.Server/Repository/Interfaces/ISiteRepository.cs b/Oqtane.Server/Repository/Interfaces/ISiteRepository.cs
index 5e05dccf..c8cfec23 100644
--- a/Oqtane.Server/Repository/Interfaces/ISiteRepository.cs
+++ b/Oqtane.Server/Repository/Interfaces/ISiteRepository.cs
@@ -10,5 +10,6 @@ namespace Oqtane.Repository
Site UpdateSite(Site site);
Site GetSite(int siteId);
void DeleteSite(int siteId);
+ void CreatePages(Site site, List pageTemplates);
}
}
diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs
index 0e39a6bf..3dea955c 100644
--- a/Oqtane.Server/Repository/SiteRepository.cs
+++ b/Oqtane.Server/Repository/SiteRepository.cs
@@ -731,7 +731,7 @@ namespace Oqtane.Repository
CreatePages(site, CreateAdminPages());
}
- private void CreatePages(Site site, List pageTemplates)
+ public void CreatePages(Site site, List pageTemplates)
{
List moduledefinitions = _moduleDefinitionRepository.GetModuleDefinitions(site.SiteId).ToList();
foreach (PageTemplate pagetemplate in pageTemplates)
diff --git a/Oqtane.Server/Scripts/Master.00.00.00.sql b/Oqtane.Server/Scripts/Master.0.9.0.sql
similarity index 90%
rename from Oqtane.Server/Scripts/Master.00.00.00.sql
rename to Oqtane.Server/Scripts/Master.0.9.0.sql
index fcfdd3ef..8f569dbb 100644
--- a/Oqtane.Server/Scripts/Master.00.00.00.sql
+++ b/Oqtane.Server/Scripts/Master.0.9.0.sql
@@ -7,6 +7,7 @@ CREATE TABLE [dbo].[Tenant](
[TenantId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[DBConnectionString] [nvarchar](1024) NOT NULL,
+ [Version] [nvarchar](50) NULL,
[CreatedBy] [nvarchar](256) NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[ModifiedBy] [nvarchar](256) NOT NULL,
@@ -91,17 +92,6 @@ CREATE TABLE [dbo].[JobLog] (
)
GO
-CREATE TABLE [dbo].[ApplicationVersion](
- [ApplicationVersionId] [int] IDENTITY(1,1) NOT NULL,
- [Version] [nvarchar](50) NOT NULL,
- [CreatedOn] [datetime] NOT NULL
- CONSTRAINT [PK_ApplicationVersion] PRIMARY KEY CLUSTERED
- (
- [ApplicationVersionId] ASC
- )
-)
-GO
-
/*
Create foreign key relationships
diff --git a/Oqtane.Server/Scripts/Master.00.00.01.sql b/Oqtane.Server/Scripts/Master.00.00.01.sql
deleted file mode 100644
index 49ec882c..00000000
--- a/Oqtane.Server/Scripts/Master.00.00.01.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-
-schema updates
-
-*/
diff --git a/Oqtane.Server/Scripts/Tenant.00.00.00.sql b/Oqtane.Server/Scripts/Tenant.0.9.0.sql
similarity index 86%
rename from Oqtane.Server/Scripts/Tenant.00.00.00.sql
rename to Oqtane.Server/Scripts/Tenant.0.9.0.sql
index 1d0e540f..81a0df24 100644
--- a/Oqtane.Server/Scripts/Tenant.00.00.00.sql
+++ b/Oqtane.Server/Scripts/Tenant.0.9.0.sql
@@ -457,3 +457,72 @@ CREATE UNIQUE NONCLUSTERED INDEX IX_Folder ON [dbo].Folder
[Path]
) ON [PRIMARY]
GO
+
+/*
+
+ASP.NET Identity Minimal Schema
+
+*/
+
+CREATE TABLE [dbo].[AspNetUsers](
+ [Id] [nvarchar](450) NOT NULL,
+ [UserName] [nvarchar](256) NULL,
+ [NormalizedUserName] [nvarchar](256) NULL,
+ [Email] [nvarchar](256) NULL,
+ [NormalizedEmail] [nvarchar](256) NULL,
+ [EmailConfirmed] [bit] NOT NULL,
+ [PasswordHash] [nvarchar](max) NULL,
+ [SecurityStamp] [nvarchar](max) NULL,
+ [ConcurrencyStamp] [nvarchar](max) NULL,
+ [PhoneNumber] [nvarchar](max) NULL,
+ [PhoneNumberConfirmed] [bit] NOT NULL,
+ [TwoFactorEnabled] [bit] NOT NULL,
+ [LockoutEnd] [datetimeoffset](7) NULL,
+ [LockoutEnabled] [bit] NOT NULL,
+ [AccessFailedCount] [int] NOT NULL,
+ CONSTRAINT [PK_AspNetUsers] PRIMARY KEY CLUSTERED
+(
+ [Id] ASC
+) ON [PRIMARY]
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[AspNetUserClaims](
+ [Id] [int] IDENTITY(1,1) NOT NULL,
+ [UserId] [nvarchar](450) NOT NULL,
+ [ClaimType] [nvarchar](max) NULL,
+ [ClaimValue] [nvarchar](max) NULL,
+ CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY CLUSTERED
+(
+ [Id] ASC
+) ON [PRIMARY]
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE NONCLUSTERED INDEX [IX_AspNetUserClaims_UserId] ON [dbo].[AspNetUserClaims]
+(
+ [UserId] ASC
+) ON [PRIMARY]
+GO
+
+CREATE NONCLUSTERED INDEX [EmailIndex] ON [dbo].[AspNetUsers]
+(
+ [NormalizedEmail] ASC
+) ON [PRIMARY]
+GO
+
+CREATE UNIQUE NONCLUSTERED INDEX [UserNameIndex] ON [dbo].[AspNetUsers]
+(
+ [NormalizedUserName] ASC
+)
+WHERE ([NormalizedUserName] IS NOT NULL)
+ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[AspNetUserClaims] WITH CHECK ADD CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY([UserId])
+REFERENCES [dbo].[AspNetUsers] ([Id])
+ON DELETE CASCADE
+GO
+
+ALTER TABLE [dbo].[AspNetUserClaims] CHECK CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId]
+GO
diff --git a/Oqtane.Server/Scripts/Tenant.00.00.01.sql b/Oqtane.Server/Scripts/Tenant.00.00.01.sql
deleted file mode 100644
index 90118490..00000000
--- a/Oqtane.Server/Scripts/Tenant.00.00.01.sql
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-
-ASP.NET Identity Minimal Schema
-
-*/
-
-CREATE TABLE [dbo].[AspNetUsers](
- [Id] [nvarchar](450) NOT NULL,
- [UserName] [nvarchar](256) NULL,
- [NormalizedUserName] [nvarchar](256) NULL,
- [Email] [nvarchar](256) NULL,
- [NormalizedEmail] [nvarchar](256) NULL,
- [EmailConfirmed] [bit] NOT NULL,
- [PasswordHash] [nvarchar](max) NULL,
- [SecurityStamp] [nvarchar](max) NULL,
- [ConcurrencyStamp] [nvarchar](max) NULL,
- [PhoneNumber] [nvarchar](max) NULL,
- [PhoneNumberConfirmed] [bit] NOT NULL,
- [TwoFactorEnabled] [bit] NOT NULL,
- [LockoutEnd] [datetimeoffset](7) NULL,
- [LockoutEnabled] [bit] NOT NULL,
- [AccessFailedCount] [int] NOT NULL,
- CONSTRAINT [PK_AspNetUsers] PRIMARY KEY CLUSTERED
-(
- [Id] ASC
-) ON [PRIMARY]
-) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[AspNetUserClaims](
- [Id] [int] IDENTITY(1,1) NOT NULL,
- [UserId] [nvarchar](450) NOT NULL,
- [ClaimType] [nvarchar](max) NULL,
- [ClaimValue] [nvarchar](max) NULL,
- CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY CLUSTERED
-(
- [Id] ASC
-) ON [PRIMARY]
-) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
-GO
-
-CREATE NONCLUSTERED INDEX [IX_AspNetUserClaims_UserId] ON [dbo].[AspNetUserClaims]
-(
- [UserId] ASC
-) ON [PRIMARY]
-GO
-
-CREATE NONCLUSTERED INDEX [EmailIndex] ON [dbo].[AspNetUsers]
-(
- [NormalizedEmail] ASC
-) ON [PRIMARY]
-GO
-
-CREATE UNIQUE NONCLUSTERED INDEX [UserNameIndex] ON [dbo].[AspNetUsers]
-(
- [NormalizedUserName] ASC
-)
-WHERE ([NormalizedUserName] IS NOT NULL)
-ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[AspNetUserClaims] WITH CHECK ADD CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY([UserId])
-REFERENCES [dbo].[AspNetUsers] ([Id])
-ON DELETE CASCADE
-GO
-
-ALTER TABLE [dbo].[AspNetUserClaims] CHECK CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId]
-GO
diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs
index 9e24a6fa..00b5f188 100644
--- a/Oqtane.Server/Startup.cs
+++ b/Oqtane.Server/Startup.cs
@@ -9,7 +9,6 @@ using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@@ -186,6 +185,7 @@ namespace Oqtane
services.AddTransient();
services.AddTransient();
services.AddTransient();
+ services.AddTransient();
// load the external assemblies into the app domain
services.AddOqtaneModules();
diff --git a/Oqtane.Shared/Models/ApplicationVersion.cs b/Oqtane.Shared/Models/ApplicationVersion.cs
deleted file mode 100644
index 9babb7cd..00000000
--- a/Oqtane.Shared/Models/ApplicationVersion.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-
-namespace Oqtane.Models
-{
- public class ApplicationVersion
- {
- public int ApplicationVersionId { get; set; }
- public string Version { get; set; }
- public DateTime CreatedOn { get; set; }
- }
-}
diff --git a/Oqtane.Shared/Models/Tenant.cs b/Oqtane.Shared/Models/Tenant.cs
index ed392544..645f1e97 100644
--- a/Oqtane.Shared/Models/Tenant.cs
+++ b/Oqtane.Shared/Models/Tenant.cs
@@ -7,6 +7,7 @@ namespace Oqtane.Models
public int TenantId { get; set; }
public string Name { get; set; }
public string DBConnectionString { get; set; }
+ public string Version { get; set; }
public string CreatedBy { get; set; }
public DateTime CreatedOn { get; set; }
public string ModifiedBy { get; set; }
diff --git a/Oqtane.Shared/Oqtane.Shared.csproj b/Oqtane.Shared/Oqtane.Shared.csproj
index 6a0c0d87..131d6055 100644
--- a/Oqtane.Shared/Oqtane.Shared.csproj
+++ b/Oqtane.Shared/Oqtane.Shared.csproj
@@ -4,7 +4,7 @@
netstandard2.1
7.3
Debug;Release
- 0.0.9
+ 0.9.0
Oqtane
Shaun Walker
.NET Foundation
diff --git a/Oqtane.Shared/Shared/Constants.cs b/Oqtane.Shared/Shared/Constants.cs
index f4edd1ce..847e7a9e 100644
--- a/Oqtane.Shared/Shared/Constants.cs
+++ b/Oqtane.Shared/Shared/Constants.cs
@@ -3,7 +3,8 @@
public class Constants
{
public const string PackageId = "Oqtane.Framework";
- public const string Version = "0.0.9";
+ public const string Version = "0.9.0";
+ public const string ReleaseVersions = "0.9.0";
public const string PageComponent = "Oqtane.UI.ThemeBuilder, Oqtane.Client";
public const string ContainerComponent = "Oqtane.UI.ContainerBuilder, Oqtane.Client";
diff --git a/Oqtane.Shared/Shared/EntityNames.cs b/Oqtane.Shared/Shared/EntityNames.cs
index 569e0603..345267f3 100644
--- a/Oqtane.Shared/Shared/EntityNames.cs
+++ b/Oqtane.Shared/Shared/EntityNames.cs
@@ -5,7 +5,7 @@
public const string Module = "Module";
public const string ModuleDefinition = "ModuleDefinition";
public const string PageModule = "PageModule";
- public const string Host = "Host";
+ public const string Tenant = "Tenant";
public const string Site = "Site";
public const string Page = "Page";
public const string Folder = "Folder";
diff --git a/Oqtane.Upgrade/Oqtane.Upgrade.csproj b/Oqtane.Upgrade/Oqtane.Upgrade.csproj
index dad498df..f4437db3 100644
--- a/Oqtane.Upgrade/Oqtane.Upgrade.csproj
+++ b/Oqtane.Upgrade/Oqtane.Upgrade.csproj
@@ -4,7 +4,7 @@
netcoreapp3.1
7.3
Exe
- 0.0.9
+ 0.9.0
Oqtane
Shaun Walker
.NET Foundation