Merge pull request #1398 from cnurse/dev
Merge AppVersions Information into __EFMigrationsHistory table
This commit is contained in:
commit
bb92011641
51
Oqtane.Database.PostgreSQL/OqtaneHistoryRepository.cs
Normal file
51
Oqtane.Database.PostgreSQL/OqtaneHistoryRepository.cs
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Migrations.Internal;
|
||||||
|
using Oqtane.Migrations.Framework;
|
||||||
|
using Oqtane.Models;
|
||||||
|
using Oqtane.Shared;
|
||||||
|
|
||||||
|
// ReSharper disable ClassNeverInstantiated.Global
|
||||||
|
|
||||||
|
namespace Oqtane.Database.PostgreSQL
|
||||||
|
{
|
||||||
|
public class OqtaneHistoryRepository : NpgsqlHistoryRepository
|
||||||
|
{
|
||||||
|
private string _appliedDateColumnName = "applied_date";
|
||||||
|
private string _appliedVersionColumnName = "applied_version";
|
||||||
|
private MigrationHistoryTable _migrationHistoryTable;
|
||||||
|
|
||||||
|
public OqtaneHistoryRepository(HistoryRepositoryDependencies dependencies) : base(dependencies)
|
||||||
|
{
|
||||||
|
_migrationHistoryTable = new MigrationHistoryTable
|
||||||
|
{
|
||||||
|
TableName = TableName,
|
||||||
|
TableSchema = TableSchema,
|
||||||
|
MigrationIdColumnName = MigrationIdColumnName,
|
||||||
|
ProductVersionColumnName = ProductVersionColumnName,
|
||||||
|
AppliedVersionColumnName = _appliedVersionColumnName,
|
||||||
|
AppliedDateColumnName = _appliedDateColumnName
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
|
||||||
|
{
|
||||||
|
base.ConfigureTable(history);
|
||||||
|
history.Property<string>(_appliedVersionColumnName).HasMaxLength(10);
|
||||||
|
history.Property<DateTime>(_appliedDateColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetInsertScript(HistoryRow row)
|
||||||
|
{
|
||||||
|
if (row == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(row));
|
||||||
|
}
|
||||||
|
|
||||||
|
return MigrationUtils.BuildInsertScript(row, Dependencies, _migrationHistoryTable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -119,7 +119,9 @@ namespace Oqtane.Database.PostgreSQL
|
||||||
|
|
||||||
public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString)
|
public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString)
|
||||||
{
|
{
|
||||||
return optionsBuilder.UseNpgsql(connectionString).UseSnakeCaseNamingConvention();
|
return optionsBuilder.UseNpgsql(connectionString)
|
||||||
|
.UseSnakeCaseNamingConvention()
|
||||||
|
.ReplaceService<IHistoryRepository, OqtaneHistoryRepository>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PrepareCommand(NpgsqlConnection conn, NpgsqlCommand cmd, string query)
|
private void PrepareCommand(NpgsqlConnection conn, NpgsqlCommand cmd, string query)
|
||||||
|
|
53
Oqtane.Database.SqlServer/OqtaneHistoryRepository.cs
Normal file
53
Oqtane.Database.SqlServer/OqtaneHistoryRepository.cs
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
using System;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.SqlServer.Migrations.Internal;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
|
using Oqtane.Migrations.Framework;
|
||||||
|
using Oqtane.Models;
|
||||||
|
using Oqtane.Shared;
|
||||||
|
|
||||||
|
// ReSharper disable ClassNeverInstantiated.Global
|
||||||
|
|
||||||
|
namespace Oqtane.Database.SqlServer
|
||||||
|
{
|
||||||
|
public class OqtaneHistoryRepository : SqlServerHistoryRepository
|
||||||
|
{
|
||||||
|
private string _appliedDateColumnName = "AppliedDate";
|
||||||
|
private string _appliedVersionColumnName = "AppliedVersion";
|
||||||
|
private MigrationHistoryTable _migrationHistoryTable;
|
||||||
|
|
||||||
|
public OqtaneHistoryRepository(HistoryRepositoryDependencies dependencies) : base(dependencies)
|
||||||
|
{
|
||||||
|
_migrationHistoryTable = new MigrationHistoryTable
|
||||||
|
{
|
||||||
|
TableName = TableName,
|
||||||
|
TableSchema = TableSchema,
|
||||||
|
MigrationIdColumnName = MigrationIdColumnName,
|
||||||
|
ProductVersionColumnName = ProductVersionColumnName,
|
||||||
|
AppliedVersionColumnName = _appliedVersionColumnName,
|
||||||
|
AppliedDateColumnName = _appliedDateColumnName
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
|
||||||
|
{
|
||||||
|
base.ConfigureTable(history);
|
||||||
|
history.Property<string>(_appliedVersionColumnName).HasMaxLength(10);
|
||||||
|
history.Property<DateTime>(_appliedDateColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetInsertScript(HistoryRow row)
|
||||||
|
{
|
||||||
|
if (row == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(row));
|
||||||
|
}
|
||||||
|
|
||||||
|
return MigrationUtils.BuildInsertScript(row, Dependencies, _migrationHistoryTable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -64,7 +64,8 @@ namespace Oqtane.Database.SqlServer
|
||||||
|
|
||||||
public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString)
|
public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString)
|
||||||
{
|
{
|
||||||
return optionsBuilder.UseSqlServer(connectionString);
|
return optionsBuilder.UseSqlServer(connectionString)
|
||||||
|
.ReplaceService<IHistoryRepository, OqtaneHistoryRepository>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private string FormatConnectionString(string connectionString)
|
private string FormatConnectionString(string connectionString)
|
||||||
|
|
51
Oqtane.Database.Sqlite/OqtaneHistoryRepository.cs
Normal file
51
Oqtane.Database.Sqlite/OqtaneHistoryRepository.cs
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Sqlite.Migrations.Internal;
|
||||||
|
using Oqtane.Migrations.Framework;
|
||||||
|
using Oqtane.Models;
|
||||||
|
using Oqtane.Shared;
|
||||||
|
|
||||||
|
// ReSharper disable ClassNeverInstantiated.Global
|
||||||
|
|
||||||
|
namespace Oqtane.Database.Sqlite
|
||||||
|
{
|
||||||
|
public class OqtaneHistoryRepository : SqliteHistoryRepository
|
||||||
|
{
|
||||||
|
private string _appliedDateColumnName = "AppliedDate";
|
||||||
|
private string _appliedVersionColumnName = "AppliedVersion";
|
||||||
|
private MigrationHistoryTable _migrationHistoryTable;
|
||||||
|
|
||||||
|
public OqtaneHistoryRepository(HistoryRepositoryDependencies dependencies) : base(dependencies)
|
||||||
|
{
|
||||||
|
_migrationHistoryTable = new MigrationHistoryTable
|
||||||
|
{
|
||||||
|
TableName = TableName,
|
||||||
|
TableSchema = TableSchema,
|
||||||
|
MigrationIdColumnName = MigrationIdColumnName,
|
||||||
|
ProductVersionColumnName = ProductVersionColumnName,
|
||||||
|
AppliedVersionColumnName = _appliedVersionColumnName,
|
||||||
|
AppliedDateColumnName = _appliedDateColumnName
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
|
||||||
|
{
|
||||||
|
base.ConfigureTable(history);
|
||||||
|
history.Property<string>(_appliedVersionColumnName).HasMaxLength(10);
|
||||||
|
history.Property<DateTime>(_appliedDateColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetInsertScript(HistoryRow row)
|
||||||
|
{
|
||||||
|
if (row == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(row));
|
||||||
|
}
|
||||||
|
|
||||||
|
return MigrationUtils.BuildInsertScript(row, Dependencies, _migrationHistoryTable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -77,7 +77,8 @@ namespace Oqtane.Database.Sqlite
|
||||||
|
|
||||||
public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString)
|
public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString)
|
||||||
{
|
{
|
||||||
return optionsBuilder.UseSqlite(connectionString);
|
return optionsBuilder.UseSqlite(connectionString)
|
||||||
|
.ReplaceService<IHistoryRepository, OqtaneHistoryRepository>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PrepareCommand(SqliteConnection conn, SqliteCommand cmd, string query)
|
private void PrepareCommand(SqliteConnection conn, SqliteCommand cmd, string query)
|
||||||
|
|
|
@ -726,7 +726,10 @@ namespace Oqtane.Infrastructure
|
||||||
{
|
{
|
||||||
var script = (isMaster) ? "MigrateMaster.sql" : "MigrateTenant.sql";
|
var script = (isMaster) ? "MigrateMaster.sql" : "MigrateTenant.sql";
|
||||||
|
|
||||||
sql.ExecuteScript(connectionString, databaseType, Assembly.GetExecutingAssembly(), script);
|
var query = sql.GetScriptFromAssembly(Assembly.GetExecutingAssembly(), script);
|
||||||
|
query = query.Replace("{{Version}}", Constants.Version);
|
||||||
|
|
||||||
|
sql.ExecuteNonQuery(connectionString, databaseType, query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
42
Oqtane.Server/Migrations/Framework/MigrationUtils.cs
Normal file
42
Oqtane.Server/Migrations/Framework/MigrationUtils.cs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
using System;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
|
using Oqtane.Models;
|
||||||
|
using Oqtane.Shared;
|
||||||
|
|
||||||
|
namespace Oqtane.Migrations.Framework
|
||||||
|
{
|
||||||
|
public static class MigrationUtils
|
||||||
|
{
|
||||||
|
public static string BuildInsertScript(HistoryRow row, HistoryRepositoryDependencies dependencies, MigrationHistoryTable historyTable )
|
||||||
|
{
|
||||||
|
var sqlGenerationHelper = dependencies.SqlGenerationHelper;
|
||||||
|
var stringTypeMapping = dependencies.TypeMappingSource.GetMapping(typeof(string));
|
||||||
|
|
||||||
|
return new StringBuilder().Append("INSERT INTO ")
|
||||||
|
.Append(sqlGenerationHelper.DelimitIdentifier(historyTable.TableName, historyTable.TableSchema))
|
||||||
|
.Append(" (")
|
||||||
|
.Append(sqlGenerationHelper.DelimitIdentifier(historyTable.MigrationIdColumnName))
|
||||||
|
.Append(", ")
|
||||||
|
.Append(sqlGenerationHelper.DelimitIdentifier(historyTable.ProductVersionColumnName))
|
||||||
|
.Append(", ")
|
||||||
|
.Append(sqlGenerationHelper.DelimitIdentifier(historyTable.AppliedVersionColumnName))
|
||||||
|
.Append(", ")
|
||||||
|
.Append(sqlGenerationHelper.DelimitIdentifier(historyTable.AppliedDateColumnName))
|
||||||
|
.AppendLine(")")
|
||||||
|
.Append("VALUES (")
|
||||||
|
.Append(stringTypeMapping.GenerateSqlLiteral(row.MigrationId))
|
||||||
|
.Append(", ")
|
||||||
|
.Append(stringTypeMapping.GenerateSqlLiteral(row.ProductVersion))
|
||||||
|
.Append(", ")
|
||||||
|
.Append(stringTypeMapping.GenerateSqlLiteral(Constants.Version))
|
||||||
|
.Append(", ")
|
||||||
|
.Append(stringTypeMapping.GenerateSqlLiteral(DateTime.Now.ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss'.'fffffffK")))
|
||||||
|
.Append(")")
|
||||||
|
.AppendLine(sqlGenerationHelper.StatementTerminator)
|
||||||
|
.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Master
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MasterDBContext))]
|
[DbContext(typeof(MasterDBContext))]
|
||||||
[Migration("Master.01.00.00.00")]
|
[Migration("Master.01.00.00.00")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Master
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MasterDBContext))]
|
[DbContext(typeof(MasterDBContext))]
|
||||||
[Migration("Master.01.00.01.00")]
|
[Migration("Master.01.00.01.00")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Master
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MasterDBContext))]
|
[DbContext(typeof(MasterDBContext))]
|
||||||
[Migration("Master.02.01.00.00")]
|
[Migration("Master.02.01.00.00")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Master
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MasterDBContext))]
|
[DbContext(typeof(MasterDBContext))]
|
||||||
[Migration("Master.02.01.00.01")]
|
[Migration("Master.02.01.00.01")]
|
|
@ -1,13 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
|
namespace Oqtane.Migrations.Tenant
|
||||||
namespace Oqtane.Migrations
|
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.01.00.00.00")]
|
[Migration("Tenant.01.00.00.00")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.01.00.01.00")]
|
[Migration("Tenant.01.00.01.00")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.01.00.01.01")]
|
[Migration("Tenant.01.00.01.01")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.01.00.02.01")]
|
[Migration("Tenant.01.00.02.01")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.00.00.01")]
|
[Migration("Tenant.02.00.00.01")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.00.01.01")]
|
[Migration("Tenant.02.00.01.01")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.00.01.02")]
|
[Migration("Tenant.02.00.01.02")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.00.01.03")]
|
[Migration("Tenant.02.00.01.03")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.00.02.01")]
|
[Migration("Tenant.02.00.02.01")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.00.02.02")]
|
[Migration("Tenant.02.00.02.02")]
|
|
@ -1,12 +1,10 @@
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.00.02.03")]
|
[Migration("Tenant.02.00.02.03")]
|
|
@ -1,13 +1,11 @@
|
||||||
using System;
|
using System;
|
||||||
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.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.01.00.00")]
|
[Migration("Tenant.02.01.00.00")]
|
|
@ -1,14 +1,13 @@
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Oqtane.Databases.Interfaces;
|
using Oqtane.Databases.Interfaces;
|
||||||
using Oqtane.Interfaces;
|
|
||||||
using Oqtane.Migrations.EntityBuilders;
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
|
|
||||||
namespace Oqtane.Migrations
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
[Migration("Tenant.02.01.00.02")]
|
[Migration("Tenant.02.01.00.01")]
|
||||||
public class ChangeFolderNameAndPathColumnsSize : MultiDatabaseMigration
|
public class ChangeFolderNameAndPathColumnsSize : MultiDatabaseMigration
|
||||||
{
|
{
|
||||||
public ChangeFolderNameAndPathColumnsSize(IDatabase database) : base(database)
|
public ChangeFolderNameAndPathColumnsSize(IDatabase database) : base(database)
|
|
@ -0,0 +1,24 @@
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Oqtane.Databases.Interfaces;
|
||||||
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
|
using Oqtane.Repository;
|
||||||
|
|
||||||
|
namespace Oqtane.Migrations.Tenant
|
||||||
|
{
|
||||||
|
[DbContext(typeof(TenantDBContext))]
|
||||||
|
[Migration("Tenant.02.01.00.02")]
|
||||||
|
public class DropAppVersionsTableinTenant : MultiDatabaseMigration
|
||||||
|
{
|
||||||
|
public DropAppVersionsTableinTenant(IDatabase database) : base(database)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
//Drop AppVersions table
|
||||||
|
var appVersionsEntityBuilder = new AppVersionsEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||||
|
appVersionsEntityBuilder.Drop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,10 @@ namespace Oqtane.Repository
|
||||||
|
|
||||||
int ExecuteNonQuery(Tenant tenant, string query);
|
int ExecuteNonQuery(Tenant tenant, string query);
|
||||||
|
|
||||||
|
int ExecuteNonQuery(string connectionString, string databaseType, string query);
|
||||||
|
|
||||||
IDataReader ExecuteReader(Tenant tenant, string query);
|
IDataReader ExecuteReader(Tenant tenant, string query);
|
||||||
|
|
||||||
|
string GetScriptFromAssembly(Assembly assembly, string fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,13 +78,13 @@ namespace Oqtane.Repository
|
||||||
return db.ExecuteReader(tenant.DBConnectionString, query);
|
return db.ExecuteReader(tenant.DBConnectionString, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int ExecuteNonQuery(string connectionString, string databaseType, string query)
|
public int ExecuteNonQuery(string connectionString, string databaseType, string query)
|
||||||
{
|
{
|
||||||
var db = GetActiveDatabase(databaseType);
|
var db = GetActiveDatabase(databaseType);
|
||||||
return db.ExecuteNonQuery(connectionString, query);
|
return db.ExecuteNonQuery(connectionString, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetScriptFromAssembly(Assembly assembly, string fileName)
|
public string GetScriptFromAssembly(Assembly assembly, string fileName)
|
||||||
{
|
{
|
||||||
// script must be included as an Embedded Resource within an assembly
|
// script must be included as an Embedded Resource within an assembly
|
||||||
var script = "";
|
var script = "";
|
||||||
|
|
|
@ -5,13 +5,17 @@ IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'dbo.SchemaVersion
|
||||||
CREATE TABLE __EFMigrationsHistory
|
CREATE TABLE __EFMigrationsHistory
|
||||||
(
|
(
|
||||||
MigrationId nvarchar(150) NOT NULL CONSTRAINT PK___EFMigrationsHistory PRIMARY KEY,
|
MigrationId nvarchar(150) NOT NULL CONSTRAINT PK___EFMigrationsHistory PRIMARY KEY,
|
||||||
ProductVersion nvarchar(32) NOT NULL
|
ProductVersion nvarchar(32) NOT NULL,
|
||||||
|
AppliedVersion nvarchar(10) NOT NULL,
|
||||||
|
AppliedDate datetime DEFAULT GETDATE()
|
||||||
)
|
)
|
||||||
END
|
END
|
||||||
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion)
|
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion, AppliedVersion)
|
||||||
VALUES ('Master.01.00.00.00', '5.0.0')
|
VALUES ('Master.01.00.00.00', '5.0.0', '{{Version}}')
|
||||||
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion)
|
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion, AppliedVersion)
|
||||||
SELECT REPLACE(REPLACE(ScriptName, 'Oqtane.Scripts.', ''), '.sql', '') As MigrationId, ProductVersion = '5.0.0'
|
SELECT REPLACE(REPLACE(ScriptName, 'Oqtane.Scripts.', ''), '.sql', '') As MigrationId,
|
||||||
|
ProductVersion = '5.0.0',
|
||||||
|
AppliedVersion = '{{Version}}'
|
||||||
FROM SchemaVersions
|
FROM SchemaVersions
|
||||||
WHERE ScriptName LIKE 'Oqtane.Scripts.Master.01%'
|
WHERE ScriptName LIKE 'Oqtane.Scripts.Master.01%'
|
||||||
END
|
END
|
|
@ -5,16 +5,20 @@ IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'dbo.SchemaVersion
|
||||||
CREATE TABLE __EFMigrationsHistory
|
CREATE TABLE __EFMigrationsHistory
|
||||||
(
|
(
|
||||||
MigrationId nvarchar(150) NOT NULL CONSTRAINT PK___EFMigrationsHistory PRIMARY KEY,
|
MigrationId nvarchar(150) NOT NULL CONSTRAINT PK___EFMigrationsHistory PRIMARY KEY,
|
||||||
ProductVersion nvarchar(32) NOT NULL
|
ProductVersion nvarchar(32) NOT NULL,
|
||||||
|
AppliedVersion nvarchar(10) NOT NULL,
|
||||||
|
AppliedDate datetime DEFAULT GETDATE()
|
||||||
)
|
)
|
||||||
END
|
END
|
||||||
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion)
|
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion, AppliedVersion)
|
||||||
VALUES ('Tenant.01.00.00.00', '5.0.0')
|
VALUES ('Tenant.01.00.00.00', '5.0.0', '{{Version}}')
|
||||||
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion)
|
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion, AppliedVersion)
|
||||||
SELECT REPLACE(REPLACE(ScriptName, 'Oqtane.Scripts.', ''), '.sql', '') As MigrationId, ProductVersion = '5.0.0'
|
SELECT REPLACE(REPLACE(ScriptName, 'Oqtane.Scripts.', ''), '.sql', '') As MigrationId,
|
||||||
|
ProductVersion = '5.0.0',
|
||||||
|
AppliedVersion = '{{Version}}'
|
||||||
FROM SchemaVersions
|
FROM SchemaVersions
|
||||||
WHERE ScriptName LIKE 'Oqtane.Scripts.Tenant.01%'
|
WHERE ScriptName LIKE 'Oqtane.Scripts.Tenant.01%'
|
||||||
OR ScriptName LIKE 'Oqtane.Scripts.Tenant.02%'
|
OR ScriptName LIKE 'Oqtane.Scripts.Tenant.02%'
|
||||||
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion)
|
INSERT INTO __EFMigrationsHistory(MigrationId, ProductVersion, AppliedVersion)
|
||||||
VALUES ('HtmlText.01.00.00.00', '5.0.0')
|
VALUES ('HtmlText.01.00.00.00', '5.0.0', '{{Version}}')
|
||||||
END
|
END
|
12
Oqtane.Shared/Models/MigrationHistoryTable.cs
Normal file
12
Oqtane.Shared/Models/MigrationHistoryTable.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
namespace Oqtane.Models
|
||||||
|
{
|
||||||
|
public class MigrationHistoryTable
|
||||||
|
{
|
||||||
|
public string TableName { get; set; }
|
||||||
|
public string TableSchema { get; set; }
|
||||||
|
public string MigrationIdColumnName { get; set; }
|
||||||
|
public string ProductVersionColumnName { get; set; }
|
||||||
|
public string AppliedVersionColumnName { get; set; }
|
||||||
|
public string AppliedDateColumnName { get; set; }
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user