From 4aee905f06963189fe6cf16ec5f3cba14d3c2018 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Tue, 10 Jun 2025 12:03:21 +0300 Subject: [PATCH 01/11] multiselect component update --- .../extensible-form-multiselect.component.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/multi-select/extensible-form-multiselect.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/multi-select/extensible-form-multiselect.component.ts index d55d55614d..96860b31b4 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/multi-select/extensible-form-multiselect.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/multi-select/extensible-form-multiselect.component.ts @@ -1,8 +1,9 @@ import { Component, ChangeDetectionStrategy, forwardRef, input } from '@angular/core'; import { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule } from '@angular/forms'; import { CommonModule } from '@angular/common'; -import { ABP, LocalizationModule } from '@abp/ng.core'; +import { ABP, LocalizationPipe } from '@abp/ng.core'; import { FormProp } from '../../models/form-props'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; const EXTENSIBLE_FORM_MULTI_SELECT_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, @@ -19,21 +20,24 @@ const EXTENSIBLE_FORM_MULTI_SELECT_CONTROL_VALUE_ACCESSOR = { - @if (prop().isExtra) { - {{ '::' + option.key | abpLocalization }} - } @else { - {{ option.key }} - } + } `, providers: [EXTENSIBLE_FORM_MULTI_SELECT_CONTROL_VALUE_ACCESSOR], - imports: [LocalizationModule, CommonModule, ReactiveFormsModule], + imports: [LocalizationPipe, CommonModule, ReactiveFormsModule, NgxValidateCoreModule], changeDetection: ChangeDetectionStrategy.OnPush, }) export class ExtensibleFormMultiselectComponent implements ControlValueAccessor { From 879dd0cae30753d1b4c91e9c7025e391f5a621cc Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Tue, 10 Jun 2025 16:52:56 +0300 Subject: [PATCH 02/11] abp tree dropdown overlap bug fix --- .../tree/src/lib/components/tree.component.html | 2 +- .../tree/src/lib/components/tree.component.ts | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.html b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.html index 82b3048868..8cd2058699 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.html +++ b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.html @@ -12,7 +12,7 @@ (nzCheckboxChange)="onCheckboxChange($event)" (nzOnDrop)="onDrop($event)" [nzNoAnimation]="noAnimation" - (nzContextMenu)="dropdowns[$event.node?.key]?.toggle()" + (nzContextMenu)="onContextMenuChange($event)" />
{ + if (key !== dropdownKey && dropdown?.isOpen()) { + dropdown.close(); + } + }); + this.dropdowns[dropdownKey]?.toggle(); + } + setSelectedNode(node: any) { const newSelectedNode = this.findNode(node, this.nodes); this.selectedNode = { ...newSelectedNode }; From 68e05810db61000bb2c4cb143d9f8346abcc2eaf Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 11 Jun 2025 14:59:35 +0800 Subject: [PATCH 03/11] bump Microsoft IdentityModel and OpenIddict package versions to latest --- Directory.Packages.props | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 9677f6f17b..e8ccc0e7ff 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -113,10 +113,10 @@ - - - - + + + + @@ -128,11 +128,11 @@ - - - - - + + + + + From 4f0d20c37b0adb0eadf1de25f441996180798790 Mon Sep 17 00:00:00 2001 From: Mansur Besleney Date: Wed, 11 Jun 2025 14:49:56 +0300 Subject: [PATCH 04/11] Update en.json --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 7ea0fb6708..f5fea908de 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -1890,6 +1890,7 @@ "BiographyContainsUrlValidationMessage": "Biography cannot contain URL.", "CreatePostSEOTitleInfo": "SEO URL is a clean, readable, keyword-rich URL that helps both users and search engines understand what this post is about. Keep it short with 60 characters. SEO titles over 60 characters will be truncated. Use hyphens (-) to separate words (not underscores). Include target keywords near the start. Lowercase only. No stop words unless needed (e.g: \"and\", \"or\", \"the\").", "SEOTitle": "SEO URL", - "InvalidYouTubeUrl": "The URL you entered is not a valid YouTube video link. Please make sure it points to a specific video and try again." + "InvalidYouTubeUrl": "The URL you entered is not a valid YouTube video link. Please make sure it points to a specific video and try again.", + "SelectAnOption": "Select an option" } } From f53575c1ce7cbd3ac9bfd8ce759b51329676a927 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 11 Jun 2025 20:26:00 +0800 Subject: [PATCH 05/11] Update template projects migration. --- ....cs => 20250611122251_Initial.Designer.cs} | 32 +++++++++++++++++-- ...8_Initial.cs => 20250611122251_Initial.cs} | 18 +++++++++++ .../MyProjectNameDbContextModelSnapshot.cs | 30 ++++++++++++++++- ....cs => 20250611122409_Initial.Designer.cs} | 32 +++++++++++++++++-- .../Migrations/20250611122409_Initial.cs} | 18 +++++++++++ .../MyProjectNameDbContextModelSnapshot.cs | 30 ++++++++++++++++- ....cs => 20250611122225_Initial.Designer.cs} | 32 +++++++++++++++++-- ...5_Initial.cs => 20250611122225_Initial.cs} | 18 +++++++++++ .../MyProjectNameDbContextModelSnapshot.cs | 30 ++++++++++++++++- ....cs => 20250611122237_Initial.Designer.cs} | 32 +++++++++++++++++-- ...9_Initial.cs => 20250611122237_Initial.cs} | 18 +++++++++++ .../MyProjectNameDbContextModelSnapshot.cs | 30 ++++++++++++++++- ....cs => 20250611122258_Initial.Designer.cs} | 32 +++++++++++++++++-- ...4_Initial.cs => 20250611122258_Initial.cs} | 18 +++++++++++ .../MyProjectNameDbContextModelSnapshot.cs | 30 ++++++++++++++++- ....cs => 20250611122321_Initial.Designer.cs} | 32 +++++++++++++++++-- .../Migrations/20250611122321_Initial.cs} | 18 +++++++++++ .../AuthServerDbContextModelSnapshot.cs | 30 ++++++++++++++++- ....cs => 20250611122311_Initial.Designer.cs} | 32 +++++++++++++++++-- ...8_Initial.cs => 20250611122311_Initial.cs} | 18 +++++++++++ .../UnifiedDbContextModelSnapshot.cs | 30 ++++++++++++++++- ....cs => 20250611122327_Initial.Designer.cs} | 4 +-- ...7_Initial.cs => 20250611122327_Initial.cs} | 0 ...ApiHostMigrationsDbContextModelSnapshot.cs | 2 +- ....cs => 20250611122337_Initial.Designer.cs} | 32 +++++++++++++++++-- ...8_Initial.cs => 20250611122337_Initial.cs} | 18 +++++++++++ .../UnifiedDbContextModelSnapshot.cs | 30 ++++++++++++++++- 27 files changed, 619 insertions(+), 27 deletions(-) rename templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/{20250310031518_Initial.Designer.cs => 20250611122251_Initial.Designer.cs} (98%) rename templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/{20250310031518_Initial.cs => 20250611122251_Initial.cs} (98%) rename templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/{20250310031634_Initial.Designer.cs => 20250611122409_Initial.Designer.cs} (98%) rename templates/{module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250310031550_Initial.cs => app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250611122409_Initial.cs} (98%) rename templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/{20250310031445_Initial.Designer.cs => 20250611122225_Initial.Designer.cs} (98%) rename templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/{20250310031445_Initial.cs => 20250611122225_Initial.cs} (98%) rename templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/{20250310031459_Initial.Designer.cs => 20250611122237_Initial.Designer.cs} (98%) rename templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/{20250310031459_Initial.cs => 20250611122237_Initial.cs} (98%) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/{20250310031524_Initial.Designer.cs => 20250611122258_Initial.Designer.cs} (98%) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/{20250310031524_Initial.cs => 20250611122258_Initial.cs} (98%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/{20250310031550_Initial.Designer.cs => 20250611122321_Initial.Designer.cs} (98%) rename templates/{app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250310031634_Initial.cs => module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250611122321_Initial.cs} (98%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/{20250310031538_Initial.Designer.cs => 20250611122311_Initial.Designer.cs} (98%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/{20250310031538_Initial.cs => 20250611122311_Initial.cs} (98%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/{20250310031557_Initial.Designer.cs => 20250611122327_Initial.Designer.cs} (90%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/{20250310031557_Initial.cs => 20250611122327_Initial.cs} (100%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/{20250310031608_Initial.Designer.cs => 20250611122337_Initial.Designer.cs} (98%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/{20250310031608_Initial.cs => 20250611122337_Initial.cs} (98%) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250310031518_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250611122251_Initial.Designer.cs similarity index 98% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250310031518_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250611122251_Initial.Designer.cs index 3fd2b00a67..baa25c45a2 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250310031518_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250611122251_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20250310031518_Initial")] + [Migration("20250611122251_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -199,6 +199,34 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250310031518_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250611122251_Initial.cs similarity index 98% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250310031518_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250611122251_Initial.cs index f016eda970..dd86268274 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250310031518_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20250611122251_Initial.cs @@ -11,6 +11,21 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogs", columns: table => new @@ -1020,6 +1035,9 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations migrationBuilder.DropTable( name: "AbpAuditLogActions"); + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + migrationBuilder.DropTable( name: "AbpClaimTypes"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs index 29da815662..2aa577257f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -196,6 +196,34 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250310031634_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250611122409_Initial.Designer.cs similarity index 98% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250310031634_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250611122409_Initial.Designer.cs index 3d7c7ef6ac..daa422bbcc 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250310031634_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250611122409_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20250310031634_Initial")] + [Migration("20250611122409_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -199,6 +199,34 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250310031550_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250611122409_Initial.cs similarity index 98% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250310031550_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250611122409_Initial.cs index 01342cbe1d..12a56494ee 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250310031550_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250611122409_Initial.cs @@ -11,6 +11,21 @@ namespace MyCompanyName.MyProjectName.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogs", columns: table => new @@ -1020,6 +1035,9 @@ namespace MyCompanyName.MyProjectName.Migrations migrationBuilder.DropTable( name: "AbpAuditLogActions"); + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + migrationBuilder.DropTable( name: "AbpClaimTypes"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs index b81df45051..617cde4a48 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -196,6 +196,34 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250310031445_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250611122225_Initial.Designer.cs similarity index 98% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250310031445_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250611122225_Initial.Designer.cs index 7773acc68f..88488681cd 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250310031445_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250611122225_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Host.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20250310031445_Initial")] + [Migration("20250611122225_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Host.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -199,6 +199,34 @@ namespace MyCompanyName.MyProjectName.Host.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250310031445_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250611122225_Initial.cs similarity index 98% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250310031445_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250611122225_Initial.cs index 756c93f5be..293ec738c4 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250310031445_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20250611122225_Initial.cs @@ -11,6 +11,21 @@ namespace MyCompanyName.MyProjectName.Host.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogs", columns: table => new @@ -1020,6 +1035,9 @@ namespace MyCompanyName.MyProjectName.Host.Migrations migrationBuilder.DropTable( name: "AbpAuditLogActions"); + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + migrationBuilder.DropTable( name: "AbpClaimTypes"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs index 8b3cae9651..a403280dbc 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Host.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -196,6 +196,34 @@ namespace MyCompanyName.MyProjectName.Host.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250310031459_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250611122237_Initial.Designer.cs similarity index 98% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250310031459_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250611122237_Initial.Designer.cs index d8b4cb4a48..c55ee59fc5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250310031459_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250611122237_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Mvc.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20250310031459_Initial")] + [Migration("20250611122237_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -199,6 +199,34 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250310031459_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250611122237_Initial.cs similarity index 98% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250310031459_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250611122237_Initial.cs index 744b52930e..32de876108 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250310031459_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20250611122237_Initial.cs @@ -11,6 +11,21 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogs", columns: table => new @@ -1020,6 +1035,9 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations migrationBuilder.DropTable( name: "AbpAuditLogActions"); + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + migrationBuilder.DropTable( name: "AbpClaimTypes"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs index 3699529124..77eaf6b52c 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -196,6 +196,34 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250310031524_Initial.Designer.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250611122258_Initial.Designer.cs similarity index 98% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250310031524_Initial.Designer.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250611122258_Initial.Designer.cs index 6f6d50b88e..5a7190317f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250310031524_Initial.Designer.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250611122258_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20250310031524_Initial")] + [Migration("20250611122258_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -199,6 +199,34 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250310031524_Initial.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250611122258_Initial.cs similarity index 98% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250310031524_Initial.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250611122258_Initial.cs index b22d01c83b..ec2bf59db0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250310031524_Initial.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20250611122258_Initial.cs @@ -11,6 +11,21 @@ namespace MyCompanyName.MyProjectName.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogs", columns: table => new @@ -1047,6 +1062,9 @@ namespace MyCompanyName.MyProjectName.Migrations migrationBuilder.DropTable( name: "AbpAuditLogActions"); + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + migrationBuilder.DropTable( name: "AbpBackgroundJobs"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs index 42f90bfc62..8fb9ea0266 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -196,6 +196,34 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250310031550_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250611122321_Initial.Designer.cs similarity index 98% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250310031550_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250611122321_Initial.Designer.cs index 412ca9d60c..2566ba0bb8 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250310031550_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250611122321_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(AuthServerDbContext))] - [Migration("20250310031550_Initial")] + [Migration("20250611122321_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -199,6 +199,34 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250310031634_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250611122321_Initial.cs similarity index 98% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250310031634_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250611122321_Initial.cs index 01342cbe1d..12a56494ee 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20250310031634_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20250611122321_Initial.cs @@ -11,6 +11,21 @@ namespace MyCompanyName.MyProjectName.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogs", columns: table => new @@ -1020,6 +1035,9 @@ namespace MyCompanyName.MyProjectName.Migrations migrationBuilder.DropTable( name: "AbpAuditLogActions"); + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + migrationBuilder.DropTable( name: "AbpClaimTypes"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs index f47250a204..8c0f1e1e4c 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -196,6 +196,34 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250310031538_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250611122311_Initial.Designer.cs similarity index 98% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250310031538_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250611122311_Initial.Designer.cs index 1ac2d12df8..9b8b4d619a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250310031538_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250611122311_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20250310031538_Initial")] + [Migration("20250611122311_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -199,6 +199,34 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250310031538_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250611122311_Initial.cs similarity index 98% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250310031538_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250611122311_Initial.cs index a7a41a3211..c89e81810c 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250310031538_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20250611122311_Initial.cs @@ -11,6 +11,21 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogs", columns: table => new @@ -868,6 +883,9 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations migrationBuilder.DropTable( name: "AbpAuditLogActions"); + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + migrationBuilder.DropTable( name: "AbpClaimTypes"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs index 4f14e8dec0..f055a4e99b 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -196,6 +196,34 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250310031557_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250611122327_Initial.Designer.cs similarity index 90% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250310031557_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250611122327_Initial.Designer.cs index 53e5e56a03..754d85b5a2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250310031557_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250611122327_Initial.Designer.cs @@ -12,7 +12,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameHttpApiHostMigrationsDbContext))] - [Migration("20250310031557_Initial")] + [Migration("20250611122327_Initial")] partial class Initial { /// @@ -21,7 +21,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250310031557_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250611122327_Initial.cs similarity index 100% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250310031557_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20250611122327_Initial.cs diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot.cs index 73a8d2db0a..66cac82aa6 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot.cs @@ -18,7 +18,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250310031608_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250611122337_Initial.Designer.cs similarity index 98% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250310031608_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250611122337_Initial.Designer.cs index e3239cdd3a..2756075b5f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250310031608_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250611122337_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20250310031608_Initial")] + [Migration("20250611122337_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -199,6 +199,34 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250310031608_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250611122337_Initial.cs similarity index 98% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250310031608_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250611122337_Initial.cs index 85f0b91879..cbe91752d6 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250310031608_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20250611122337_Initial.cs @@ -11,6 +11,21 @@ namespace MyCompanyName.MyProjectName.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogs", columns: table => new @@ -868,6 +883,9 @@ namespace MyCompanyName.MyProjectName.Migrations migrationBuilder.DropTable( name: "AbpAuditLogActions"); + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + migrationBuilder.DropTable( name: "AbpClaimTypes"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 802d950dec..4501348b9c 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -196,6 +196,34 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpAuditLogActions", (string)null); }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") From 4f26cc0a18c25b37c2773fccec4cc07f1946fe23 Mon Sep 17 00:00:00 2001 From: EngincanV Date: Wed, 11 Jun 2025 16:08:26 +0300 Subject: [PATCH 06/11] Update maui.md --- docs/en/get-started/maui.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/en/get-started/maui.md b/docs/en/get-started/maui.md index 657a217d44..21497fb2f7 100644 --- a/docs/en/get-started/maui.md +++ b/docs/en/get-started/maui.md @@ -13,9 +13,11 @@ dotnet tool install -g Volo.Abp.Studio.Cli Then use the `abp new` command in an empty folder to create a new solution: ````bash -abp new Acme.MyMauiApp -t maui +abp new Acme.MyMauiApp -t maui --old ```` +> **Note**: Since this startup template is not provided by the new ABP Studio Templates yet, you need to pass the `--old` parameter at the end of the command to use the old CLI & templating system for this startup template. + `Acme.MyMauiApp` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming. ## Solution Structure From e49f1fc31c3cf7d845ee4045e93572a0dd3b9088 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 11 Jun 2025 13:14:26 +0000 Subject: [PATCH 07/11] Update release-notes.md --- docs/en/release-info/release-notes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/release-info/release-notes.md b/docs/en/release-info/release-notes.md index 4c6bec206e..ce35f8b87c 100644 --- a/docs/en/release-info/release-notes.md +++ b/docs/en/release-info/release-notes.md @@ -8,9 +8,9 @@ Also see the following notes about ABP releases: * [Change logs for ABP pro packages](https://abp.io/pro-releases) -## 9.2 (2025-03-25) +## 9.2 (2025-06-02) -This is currently a RC (release-candidate) and you can see the detailed **[blog post / announcement](https://abp.io/community/articles/abp-platform-9.2-rc-has-been-released-jpq072nh)** for the v9.2 release. +See the detailed **[blog post / announcement](https://abp.io/community/articles/announcing-abp-9-2-stable-release-061qmtzb)** for the v9.2 release. * Added `ApplicationName` Property to Isolate Background Jobs & Background Workers * Docs Module: Added "Alternative Words" to Filter Items From 2762b3892678f0e45231d8842f99d736cc12a969 Mon Sep 17 00:00:00 2001 From: Burak Demir <20765936+burakdmir@users.noreply.github.com> Date: Thu, 12 Jun 2025 09:58:16 +0300 Subject: [PATCH 08/11] feat(docs): Create blog post for MongoDB GUID fix Adds a new blog post in Markdown format. The post explains how to resolve GUID deserialization errors after upgrading ABP Framework and the MongoDB driver by using an application-level convention. It also links to the official ABP migration guides. --- .../post.md | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 docs/en/Community-Articles/2025-06-12-fix-mongodb-guid-abp-v9.2.0-upgrade/post.md diff --git a/docs/en/Community-Articles/2025-06-12-fix-mongodb-guid-abp-v9.2.0-upgrade/post.md b/docs/en/Community-Articles/2025-06-12-fix-mongodb-guid-abp-v9.2.0-upgrade/post.md new file mode 100644 index 0000000000..ddae9a3704 --- /dev/null +++ b/docs/en/Community-Articles/2025-06-12-fix-mongodb-guid-abp-v9.2.0-upgrade/post.md @@ -0,0 +1,93 @@ +# Solving MongoDB GUID Issues After an ABP Framework Upgrade + +So, you've just upgraded your ABP Framework application to a newer version (like v9.2.0+) and suddenly, your application can't read data from its MongoDB database. You're seeing strange deserialization errors, especially related to `Guid` types. What's going on? + +You've likely run into a classic compatibility issue with the MongoDB .NET driver. + +### The Problem: Legacy vs. Standard GUIDs + +Here's the short version: + +* **Old MongoDB Drivers** (used in older ABP versions) stored `Guid` values in a format called `CSharpLegacy`. +* **New MongoDB Drivers** (v3.0+), now default to a universal `Standard` format. + +When your newly upgraded app tries to read old data, the new driver expects the `Standard` format but finds `CSharpLegacy`. The byte orders don't match, and... boom. Deserialization fails. + +The ABP Framework team has an excellent official guide covering this topic in detail. We highly recommend reading their **[MongoDB Driver 2 to 3 Migration Guide](https://abp.io/docs/latest/release-info/migration-guides/MongoDB-Driver-2-to-3)** for a full understanding. + +Our tip below serves as a fast, application-level fix if you need to get your system back online quickly without performing a full data migration. + +### The Quick Fix: Tell the Driver to Use the Old Format + +Instead of changing your data, you can simply tell the new driver to continue using the old `CSharpLegacy` format for all `Guid` and `Guid?` properties. This provides immediate backward compatibility without touching your database. + +It’s a simple, two-step process. + +#### Step 1: Create a Custom Convention + +First, create this class in your `.MongoDb` project. It tells the serializer how to handle `Guid` types. + +```csharp +using MongoDB.Bson; +using MongoDB.Bson.Serialization; +using MongoDB.Bson.Serialization.Conventions; +using MongoDB.Bson.Serialization.Serializers; +using System; + +public class LegacyGuidConvention : ConventionBase, IMemberMapConvention +{ + public void Apply(BsonMemberMap memberMap) + { + if (memberMap.MemberType == typeof(Guid)) + { + memberMap.SetSerializer(new GuidSerializer(GuidRepresentation.CSharpLegacy)); + } + else if (memberMap.MemberType == typeof(Guid?)) + { + var guidSerializer = new GuidSerializer(GuidRepresentation.CSharpLegacy); + var nullableGuidSerializer = new NullableSerializer(guidSerializer); + memberMap.SetSerializer(nullableGuidSerializer); + } + } +} +``` + +#### Step 2: Register the Convention at Startup + +Now, register this convention in your `YourProjectMongoDbModule.cs` file. Add this code to the top of the `ConfigureServices` method. This ensures your rule is applied globally as soon as the application starts. + +```csharp +using Volo.Abp.Modularity; +using MongoDB.Bson.Serialization; +using MongoDB.Bson.Serialization.Conventions; + +public class YourProjectMongoDbModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + // Fix Start + var conventionPack = new ConventionPack { new LegacyGuidConvention() }; + ConventionRegistry.Register( + "LegacyGuidConvention", + conventionPack, + t => true); // Apply to all types + // Fix End + + // ... Your existing ConfigureServices code + } +} +``` + +### An Alternative to Full Data Migration + +It's important to note that the method described here is an **application-level fix**. It's a fantastic alternative to performing a full data migration, which involves writing scripts to convert every legacy GUID in your database. + +If you are interested in the more permanent, data-centric approach, the ABP.IO community has a detailed guide on [**Migrating MongoDB GUIDs from Legacy to Standard Format**](https://abp.io/community/articles/migrating-mongodb-guids-from-legacy-to-standard-format-mongodb-v2-to-v3-dqwybdtw). + +Our quick fix is ideal for getting a system back online fast or when a database migration is too complex. The full migration is better for long-term standards compliance. Choose the path that best fits your project's needs! + +### That's It! + +Restart your application, and the errors should be gone. Your app can now correctly read its old `Guid` data, and it will continue to write new data in the same legacy format, ensuring consistency. + +This approach is a lifesaver for existing projects, saving you from a risky and time-consuming data migration. For brand-new projects, you might consider starting with the `Standard` representation, but for everything else, this is a clean and effective fix. Happy coding! From 6427c4b818c1c3891a7f0129d0e4c463f9c5707c Mon Sep 17 00:00:00 2001 From: Burak Demir <20765936+burakdmir@users.noreply.github.com> Date: Thu, 12 Jun 2025 10:02:08 +0300 Subject: [PATCH 09/11] Add Post Image --- .../mongo-db.jpg | Bin 0 -> 79519 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/en/Community-Articles/2025-06-12-fix-mongodb-guid-abp-v9.2.0-upgrade/mongo-db.jpg diff --git a/docs/en/Community-Articles/2025-06-12-fix-mongodb-guid-abp-v9.2.0-upgrade/mongo-db.jpg b/docs/en/Community-Articles/2025-06-12-fix-mongodb-guid-abp-v9.2.0-upgrade/mongo-db.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a829bc28b486678cdae50abb2cbf6bc88ae90bc1 GIT binary patch literal 79519 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 literal 0 HcmV?d00001 From 236f0f82e604adc37aaca909fa1d6e0995cb2542 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Thu, 12 Jun 2025 10:30:30 +0300 Subject: [PATCH 10/11] update: disable feature if it is not configured by the current provider --- .../feature-management.component.html | 34 ++++++++++++++----- .../feature-management.component.ts | 4 +++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html index b5dc440c76..a81444e56c 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html +++ b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html @@ -28,6 +28,10 @@


@for (feature of features[group.name]; track feature.id || i; let i = $index) { + @let provider = feature.provider.name; + @let isFeatureDisabled = + provider !== providerName && provider !== defaultProviderName; +
@switch (feature.valueType?.name) { @case (valueTypes.ToggleStringValueType) { @@ -38,11 +42,15 @@ [id]="feature.name" [(ngModel)]="feature.value" (ngModelChange)="onCheckboxClick($event, feature)" + [disabled]="isFeatureDisabled" /> - + - + - +