fix #4855 - dropping required column causes issue on SQLite

This commit is contained in:
sbwalker 2024-11-22 11:55:43 -05:00
parent 043fb1abd1
commit 7d94e4a53a
5 changed files with 42 additions and 4 deletions

View File

@ -0,0 +1,32 @@
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.06.00.01.01")]
public class AddLanguageName : MultiDatabaseMigration
{
public AddLanguageName(IDatabase database) : base(database)
{
}
protected override void Up(MigrationBuilder migrationBuilder)
{
// Name column was removed in 5.2.4 however SQLite does not support column removal so it had to be restored
if (ActiveDatabase.Name != "Sqlite")
{
var languageEntityBuilder = new LanguageEntityBuilder(migrationBuilder, ActiveDatabase);
languageEntityBuilder.AddStringColumn("Name", 100, true);
}
}
protected override void Down(MigrationBuilder migrationBuilder)
{
// not implemented
}
}
}

View File

@ -31,7 +31,7 @@ namespace Oqtane.Repository
.ToList() .ToList()
.ForEach(l => l.IsDefault = false); .ForEach(l => l.IsDefault = false);
} }
language.Name = ""; // stored in database but not used (SQLite limitation)
db.Language.Add(language); db.Language.Add(language);
db.SaveChanges(); db.SaveChanges();
@ -55,6 +55,7 @@ namespace Oqtane.Repository
.ForEach(l => l.IsDefault = false); .ForEach(l => l.IsDefault = false);
} }
language.Name = ""; // stored in database but not used (SQLite limitation)
db.SaveChanges(); db.SaveChanges();
} }

View File

@ -56,7 +56,9 @@ namespace Oqtane.Models
public string Description { get; set; } public string Description { get; set; }
/// <summary> /// <summary>
/// Deprecated - not used /// Deprecated
/// Note that this property still exists in the database because columns cannot be dropped in SQLite
/// Therefore the property must be retained/mapped even though the framework no longer uses it
/// </summary> /// </summary>
public bool? IsDeleted { get; set; } public bool? IsDeleted { get; set; }

View File

@ -63,7 +63,9 @@ namespace Oqtane.Models
public bool IsSystem { get; set; } public bool IsSystem { get; set; }
/// <summary> /// <summary>
/// Deprecated - not used /// Deprecated
/// Note that this property still exists in the database because columns cannot be dropped in SQLite
/// Therefore the property must be retained/mapped even though the framework no longer uses it
/// </summary> /// </summary>
public bool? IsDeleted { get; set; } public bool? IsDeleted { get; set; }

View File

@ -29,9 +29,10 @@ namespace Oqtane.Models
/// </summary> /// </summary>
public bool IsDefault { get; set; } public bool IsDefault { get; set; }
[NotMapped]
/// <summary> /// <summary>
/// Language Name - corresponds to <see cref="Culture.DisplayName"/>, _not_ <see cref="Culture.Name"/> /// Language Name - corresponds to <see cref="Culture.DisplayName"/>, _not_ <see cref="Culture.Name"/>
/// Note that this property still exists in the database because columns cannot be dropped in SQLite
/// Therefore the property must be retained/mapped even though the framework populates it from the Culture API
/// </summary> /// </summary>
public string Name { get; set; } public string Name { get; set; }