From 3ec88670e093fe3503dcc32f9293819f26c2e3e8 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Wed, 7 Jan 2026 18:35:20 +0100 Subject: [PATCH 01/20] Squash merge Squash merged v173/20453-fix-more-sql-syntax-issues int v173/20453-fix-more-sql-syntax-issues-squash (copy of main) --- .../Tree/DataTypeTreeControllerBase.cs | 4 +- .../Tree/DocumentTreeControllerBase.cs | 2 +- .../DocumentBlueprintTreeControllerBase.cs | 4 +- .../Media/Tree/MediaTreeControllerBase.cs | 2 +- .../RecycleBin/RecycleBinControllerBase.cs | 2 +- .../Tree/EntityTreeControllerBase.cs | 2 +- .../Tree/FolderTreeControllerBase.cs | 4 +- .../Persistence/Constants-DatabaseSchema.cs | 6 + src/Umbraco.Core/Services/EntityService.cs | 3 + .../Migrations/Install/DatabaseDataCreator.cs | 2220 +++++++---------- .../Install/DatabaseSchemaCreator.cs | 43 +- .../DatabaseSchemaInitializedNotification.cs | 20 + .../Persistence/Dtos/AccessDto.cs | 5 +- .../Persistence/Dtos/AccessRuleDto.cs | 6 +- .../Persistence/Dtos/AuditEntryDto.cs | 5 +- .../Persistence/Dtos/CacheInstructionDto.cs | 5 +- .../Persistence/Dtos/ConsentDto.cs | 5 +- .../Persistence/Dtos/ContentDto.cs | 14 +- .../Persistence/Dtos/ContentNuDto.cs | 5 +- .../Persistence/Dtos/ContentScheduleDto.cs | 5 +- .../Dtos/ContentType2ContentTypeDto.cs | 8 +- .../Dtos/ContentTypeAllowedContentTypeDto.cs | 10 +- .../Persistence/Dtos/ContentTypeDto.cs | 8 +- .../Dtos/ContentTypeTemplateDto.cs | 5 +- .../Dtos/ContentVersionCleanupPolicyDto.cs | 5 +- .../Dtos/ContentVersionCultureVariationDto.cs | 7 +- .../Persistence/Dtos/ContentVersionDto.cs | 5 +- .../Dtos/CreatedPackageSchemaDto.cs | 5 +- .../Persistence/Dtos/DataTypeDto.cs | 6 +- .../Persistence/Dtos/DictionaryDto.cs | 7 +- .../Persistence/Dtos/DistributedJobDto.cs | 7 +- .../Dtos/DocumentCultureVariationDto.cs | 5 +- .../Persistence/Dtos/DocumentDto.cs | 5 +- .../Persistence/Dtos/DocumentUrlDto.cs | 5 +- .../Persistence/Dtos/DocumentVersionDto.cs | 5 +- .../Persistence/Dtos/DomainDto.cs | 5 +- .../Persistence/Dtos/ExternalLoginDto.cs | 5 +- .../Persistence/Dtos/ExternalLoginTokenDto.cs | 5 +- .../Persistence/Dtos/KeyValueDto.cs | 5 +- .../Persistence/Dtos/LanguageDto.cs | 5 +- .../Persistence/Dtos/LanguageTextDto.cs | 9 +- .../Persistence/Dtos/LastSyncedDto.cs | 7 +- .../Persistence/Dtos/LockDto.cs | 9 +- .../Persistence/Dtos/LogDto.cs | 5 +- .../Persistence/Dtos/LogViewerQueryDto.cs | 5 +- .../Dtos/LongRunningOperationDto.cs | 5 +- .../Persistence/Dtos/MediaVersionDto.cs | 5 +- .../Persistence/Dtos/Member2MemberGroupDto.cs | 7 +- .../Persistence/Dtos/MemberDto.cs | 5 +- .../Persistence/Dtos/MemberPropertyTypeDto.cs | 14 +- .../Persistence/Dtos/NodeDto.cs | 7 +- .../Persistence/Dtos/PropertyDataDto.cs | 13 +- .../Persistence/Dtos/PropertyTypeDto.cs | 20 +- .../Persistence/Dtos/PropertyTypeGroupDto.cs | 15 +- .../Dtos/PropertyTypeGroupReadOnlyDto.cs | 5 +- .../Dtos/PropertyTypeReadOnlyDto.cs | 7 +- .../Persistence/Dtos/RedirectUrlDto.cs | 5 +- .../Persistence/Dtos/RelationDto.cs | 5 +- .../Persistence/Dtos/RelationTypeDto.cs | 5 +- .../Dtos/RepositoryCacheVersionDto.cs | 5 +- .../Persistence/Dtos/ServerRegistrationDto.cs | 5 +- .../Persistence/Dtos/TagDto.cs | 5 +- .../Persistence/Dtos/TagRelationshipDto.cs | 5 +- .../Persistence/Dtos/TemplateDto.cs | 5 +- .../Persistence/Dtos/TwoFactorLoginDto.cs | 5 +- .../Persistence/Dtos/User2ClientIdDto.cs | 7 +- .../Persistence/Dtos/User2NodeNotifyDto.cs | 10 +- .../Persistence/Dtos/UserDataDto.cs | 5 +- .../Persistence/Dtos/UserDto.cs | 5 +- .../Persistence/Dtos/UserGroup2AppDto.cs | 5 +- .../Dtos/UserGroup2GranularPermissionDto.cs | 14 +- .../Dtos/UserGroup2PermissionDto.cs | 5 +- .../Persistence/Dtos/UserGroupDto.cs | 8 +- .../Persistence/Dtos/UserLoginDto.cs | 5 +- .../Persistence/Dtos/UserStartNodeDto.cs | 5 +- .../Persistence/Dtos/Webhook2HeadersDto.cs | 4 +- .../Persistence/Dtos/WebhookDto.cs | 5 +- .../Persistence/Dtos/WebhookLogDto.cs | 5 +- .../Persistence/Dtos/WebhookRequestDto.cs | 5 +- .../Persistence/NPocoSqlExtensions.cs | 44 +- .../Persistence/Querying/Query.cs | 21 +- .../Relations/ContentRelationsUpdate.cs | 3 +- .../Repositories/Implement/AuditRepository.cs | 3 +- .../Implement/ContentRepositoryBase.cs | 8 +- .../Implement/ContentTypeRepository.cs | 8 +- .../Implement/ContentTypeRepositoryBase.cs | 32 +- .../Implement/DomainRepository.cs | 4 +- .../Implement/EntityRepository.cs | 25 +- .../Implement/IdKeyMapRepository.cs | 4 +- .../Implement/LanguageRepository.cs | 18 +- .../Implement/LastSyncedRepository.cs | 10 +- .../Repositories/Implement/MediaRepository.cs | 2 +- .../Implement/MemberRepository.cs | 29 +- .../Implement/MemberTypeRepository.cs | 4 +- .../Implement/NotificationsRepository.cs | 2 +- .../Implement/RedirectUrlRepository.cs | 11 +- .../Repositories/Implement/RepositoryBase.cs | 14 + .../Repositories/Implement/TagRepository.cs | 16 +- .../Implement/TrackedReferencesRepository.cs | 6 +- .../Implement/UserGroupRepository.cs | 2 +- .../Repositories/Implement/UserRepository.cs | 24 +- .../SqlSyntax/ISqlSyntaxProvider.cs | 36 + .../SqlSyntax/SqlSyntaxProviderBase.cs | 13 + .../Persistence/UmbracoDatabaseExtensions.cs | 2 +- .../Persistence/UmbracoDatabaseFactory.cs | 4 +- .../Services/Implement/UserIdKeyResolver.cs | 3 +- .../Persistence/DatabaseCacheRepository.cs | 35 +- .../DictionaryTranslationMapperTest.cs | 2 +- .../NPocoTests/NPocoSqlExtensionsTests.cs | 4 +- .../ContentTypeRepositorySqlClausesTest.cs | 4 +- 110 files changed, 1548 insertions(+), 1596 deletions(-) create mode 100644 src/Umbraco.Infrastructure/Migrations/Notifications/DatabaseSchemaInitializedNotification.cs diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs index e3bcf686b47b..65009d847d4d 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs @@ -43,8 +43,8 @@ protected override Ordering ItemOrdering { get { - var ordering = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectType), Direction.Descending); // We need to override to change direction - ordering.Next = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text)); + var ordering = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectTypeColumnName, Direction.Descending); // We need to override to change direction + ordering.Next = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName); return ordering; } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs index 11e205c39fb5..bb61e01e96a5 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs @@ -70,7 +70,7 @@ protected DocumentTreeControllerBase( protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Document; - protected override Ordering ItemOrdering => Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.SortOrder)); + protected override Ordering ItemOrdering => Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.SortOrderColumnName); protected override DocumentTreeItemResponseModel MapTreeItemViewModel(Guid? parentId, IEntitySlim entity) { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs index ad6330498ec3..b3d7a9889ff1 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs @@ -43,8 +43,8 @@ protected override Ordering ItemOrdering { get { - var ordering = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectType), Direction.Descending); // We need to override to change direction - ordering.Next = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text)); + var ordering = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectTypeColumnName, Direction.Descending); // We need to override to change direction + ordering.Next = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName); return ordering; } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs index 4990c1aaff57..ef639895d8fd 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs @@ -64,7 +64,7 @@ public MediaTreeControllerBase( protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Media; - protected override Ordering ItemOrdering => Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.SortOrder)); + protected override Ordering ItemOrdering => Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.SortOrderColumnName); protected override MediaTreeItemResponseModel MapTreeItemViewModel(Guid? parentKey, IEntitySlim entity) { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs index 59e10df4542a..d386a2cf1ecb 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs @@ -168,7 +168,7 @@ protected virtual IEntitySlim[] GetSiblingEntities(Guid target, int before, int after, out totalBefore, out totalAfter, - ordering: Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text))) + ordering: Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName)) .ToArray(); /// diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Tree/EntityTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Tree/EntityTreeControllerBase.cs index d96c597ad2e9..599a25fa0950 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Tree/EntityTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Tree/EntityTreeControllerBase.cs @@ -36,7 +36,7 @@ protected EntityTreeControllerBase(IEntityService entityService, FlagProviderCol protected abstract UmbracoObjectTypes ItemObjectType { get; } - protected virtual Ordering ItemOrdering => Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text)); + protected virtual Ordering ItemOrdering => Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName); protected async Task>> GetRoot(int skip, int take) { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Tree/FolderTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Tree/FolderTreeControllerBase.cs index 9d8d3e732c61..e557a0ee4849 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Tree/FolderTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Tree/FolderTreeControllerBase.cs @@ -24,8 +24,8 @@ protected override Ordering ItemOrdering get { // Override to order by type (folder vs item) before the text - var ordering = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectType)); - ordering.Next = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text)); + var ordering = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectTypeColumnName); + ordering.Next = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName); return ordering; } diff --git a/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs b/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs index 296ef37a84a8..f785b005ab84 100644 --- a/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs +++ b/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs @@ -9,6 +9,12 @@ public static class DatabaseSchema // TODO: Why aren't all table names with the same prefix? public const string TableNamePrefix = "umbraco"; + public const string PrimaryKeyNameId = "id"; + public const string PrimaryKeyNamePK = "pk"; + public const string PrimaryKeyNameKey = "key"; + public const string NodeIdName = "nodeId"; + public const string UniqueIdName = "uniqueId"; + public static class Tables { public const string Lock = TableNamePrefix + "Lock"; diff --git a/src/Umbraco.Core/Services/EntityService.cs b/src/Umbraco.Core/Services/EntityService.cs index c13111088edc..71813c58a9c7 100644 --- a/src/Umbraco.Core/Services/EntityService.cs +++ b/src/Umbraco.Core/Services/EntityService.cs @@ -560,6 +560,9 @@ public IEnumerable GetPagedDescendants( IQuery? filter = null, Ordering? ordering = null) { + // Ensure deterministic results. Descendants are expected to be ordered by Path by default. + ordering ??= Ordering.By("path"); + using (ScopeProvider.CreateCoreScope(autoComplete: true)) { Guid objectTypeGuid = objectType.GetGuid(); diff --git a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs index cda05c55cba7..9ab299c0b567 100644 --- a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs +++ b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs @@ -3,12 +3,12 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using NPoco; +using NPoco.DatabaseTypes; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; using Umbraco.Cms.Core.Configuration; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Models; -using Umbraco.Cms.Infrastructure.BackgroundJobs; using Umbraco.Cms.Infrastructure.Migrations.Upgrade; using Umbraco.Cms.Infrastructure.Persistence; using Umbraco.Cms.Infrastructure.Persistence.Dtos; @@ -22,6 +22,9 @@ namespace Umbraco.Cms.Infrastructure.Migrations.Install; /// internal sealed class DatabaseDataCreator { +#pragma warning disable CS8604 // Possible null reference argument. +#pragma warning disable SA1117 // Parameters should be on same line or separate lines +#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type. internal const string EditorGroupAlias = "editor"; @@ -88,6 +91,7 @@ internal sealed class DatabaseDataCreator private const string ImageMediaTypeKey = "cc07b313-0843-4aa8-bbda-871c8da728c8"; private readonly IDatabase _database; + private ISqlSyntaxProvider SqlSyntax => ((IUmbracoDatabase)_database).SqlContext.SqlSyntax; private readonly IDictionary> _entitiesToAlwaysCreate = new Dictionary> { @@ -100,6 +104,7 @@ internal sealed class DatabaseDataCreator private readonly IOptionsMonitor _installDefaultDataSettings; private readonly ILogger _logger; private readonly IUmbracoVersion _umbracoVersion; + private readonly IPocoDataFactory _pocoDataFactory; /// /// Initializes a new instance of the class. @@ -118,6 +123,8 @@ public DatabaseDataCreator( _logger = logger; _umbracoVersion = umbracoVersion; _installDefaultDataSettings = installDefaultDataSettings; + + _pocoDataFactory = ((Database)database).PocoDataFactory; } /// @@ -129,82 +136,83 @@ public void InitializeBaseData(string tableName) { _logger.LogInformation("Creating data in {TableName}", tableName); - if (tableName.Equals(Constants.DatabaseSchema.Tables.Node)) + if (tableName.Equals(NodeDto.TableName)) { CreateNodeData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.Lock)) + if (tableName.Equals(LockDto.TableName)) { CreateLockData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.ContentType)) + if (tableName.Equals(ContentTypeDto.TableName)) { CreateContentTypeData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.User)) + if (tableName.Equals(UserDto.TableName)) { CreateUserData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.UserGroup)) + if (tableName.Equals(UserGroupDto.TableName)) { CreateUserGroupData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.UserGroup2Permission)) + if (tableName.Equals(UserGroup2PermissionDto.TableName)) { CreateUserGroup2PermissionData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.User2UserGroup)) + if (tableName.Equals(User2UserGroupDto.TableName)) { CreateUser2UserGroupData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.UserGroup2App)) + if (tableName.Equals(UserGroup2AppDto.TableName)) { CreateUserGroup2AppData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.PropertyTypeGroup)) + if (tableName.Equals(PropertyTypeGroupDto.TableName)) { CreatePropertyTypeGroupData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.PropertyType)) + if (tableName.Equals(PropertyTypeDto.TableName)) { CreatePropertyTypeData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.Language)) + if (tableName.Equals(LanguageDto.TableName)) { CreateLanguageData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.ContentChildType)) + // Constants.DatabaseSchema.Tables.ContentChildType + if (tableName.Equals(ContentTypeAllowedContentTypeDto.TableName)) { - CreateContentChildTypeData(); + CreateContentTypeAllowedContentType(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.DataType)) + if (tableName.Equals(DataTypeDto.TableName)) { CreateDataTypeData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.RelationType)) + if (tableName.Equals(RelationTypeDto.TableName)) { CreateRelationTypeData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.KeyValue)) + if (tableName.Equals(KeyValueDto.TableName)) { CreateKeyValueData(); } - if (tableName.Equals(Constants.DatabaseSchema.Tables.LogViewerQuery)) + if (tableName.Equals(LogViewerQueryDto.TableName)) { CreateLogViewerQueryData(); } @@ -227,10 +235,7 @@ private void CreateUserGroup2PermissionData() { foreach (var permission in permissions) { - _database.Insert( - Constants.DatabaseSchema.Tables.UserGroup2Permission, - "id", - false, + Insert( new UserGroup2PermissionDto { Id = i++, @@ -272,15 +277,12 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, uniqueId, - nodeDto, - Constants.DatabaseSchema.Tables.Node, - "id"); + nodeDto); } - _database.Insert( - Constants.DatabaseSchema.Tables.Node, - "id", - false, + //var primaryKeyName = GetPrimaryKeyName("id"); + + Insert( new NodeDto { NodeId = -1, @@ -295,10 +297,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) NodeObjectType = Constants.ObjectTypes.SystemRoot, CreateDate = DateTime.UtcNow, }); - _database.Insert( - Constants.DatabaseSchema.Tables.Node, - "id", - false, + Insert( new NodeDto { NodeId = Constants.System.RecycleBinContent, @@ -313,10 +312,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) NodeObjectType = Constants.ObjectTypes.ContentRecycleBin, CreateDate = DateTime.UtcNow, }); - _database.Insert( - Constants.DatabaseSchema.Tables.Node, - "id", - false, + Insert( new NodeDto { NodeId = Constants.System.RecycleBinMedia, @@ -389,9 +385,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Upload File", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.UploadVideo, @@ -408,9 +402,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Upload Video", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.UploadAudio, @@ -427,9 +419,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Upload Audio", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.UploadArticle, @@ -446,9 +436,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Upload Article", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.UploadVectorGraphics, @@ -465,9 +453,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Upload Vector Graphics", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.Textarea, @@ -484,9 +470,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Textarea", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.Textstring, @@ -503,9 +487,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Textstring", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.RichtextEditor, @@ -522,9 +504,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Richtext editor", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.Numeric, @@ -541,9 +521,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Numeric", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.Checkbox, @@ -560,9 +538,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "True/false", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.CheckboxList, @@ -579,9 +555,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Checkbox list", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.Dropdown, @@ -598,9 +572,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Dropdown", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.DatePicker, @@ -617,9 +589,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Date Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.Radiobox, @@ -636,9 +606,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Radiobox", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.DropdownMultiple, @@ -655,9 +623,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Dropdown multiple", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.ApprovedColor, @@ -674,9 +640,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Approved Color", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.DatePickerWithTime, @@ -693,9 +657,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Date Picker with time", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.ListViewContent, @@ -712,9 +674,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = Constants.Conventions.DataTypes.ListViewPrefix + "Content", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.ListViewMedia, @@ -731,9 +691,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = Constants.Conventions.DataTypes.ListViewPrefix + "Media", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.Tags, @@ -750,9 +708,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Tags", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.ImageCropper, @@ -769,10 +725,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Image Cropper", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); - + }); // New UDI pickers with newer Ids ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, @@ -790,9 +743,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Content Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.MemberPicker, @@ -809,10 +760,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Member Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); - + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.RelatedLinks, @@ -829,10 +777,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Multi URL Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); - + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.MediaPicker3, @@ -849,9 +794,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.MediaPicker3Multiple, @@ -868,9 +811,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Multiple Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.MediaPicker3SingleImage, @@ -887,9 +828,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Image Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.MediaPicker3MultipleImages, @@ -906,9 +845,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Multiple Image Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes, Constants.DataTypes.Guids.DateTimePickerWithTimeZone, @@ -925,9 +862,7 @@ void InsertDataTypeNodeDto(int id, int sortOrder, string uniqueId, string text) Text = "Date Time Picker (with time zone)", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); } private void CreateNodeDataForMediaTypes() @@ -949,9 +884,7 @@ private void CreateNodeDataForMediaTypes() Text = Constants.Conventions.MediaTypes.Folder, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); var imageUniqueId = new Guid(ImageMediaTypeKey); ConditionalInsert( @@ -970,9 +903,7 @@ private void CreateNodeDataForMediaTypes() Text = Constants.Conventions.MediaTypes.Image, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); var fileUniqueId = new Guid("4c52d8ab-54e6-40cd-999c-7a5f24903e4d"); ConditionalInsert( @@ -991,9 +922,7 @@ private void CreateNodeDataForMediaTypes() Text = Constants.Conventions.MediaTypes.File, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); var videoUniqueId = new Guid("f6c515bb-653c-4bdc-821c-987729ebe327"); ConditionalInsert( @@ -1012,9 +941,7 @@ private void CreateNodeDataForMediaTypes() Text = Constants.Conventions.MediaTypes.Video, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); var audioUniqueId = new Guid("a5ddeee0-8fd8-4cee-a658-6f1fcdb00de3"); ConditionalInsert( @@ -1033,9 +960,7 @@ private void CreateNodeDataForMediaTypes() Text = Constants.Conventions.MediaTypes.Audio, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); var articleUniqueId = new Guid("a43e3414-9599-4230-a7d3-943a21b20122"); ConditionalInsert( @@ -1054,9 +979,7 @@ private void CreateNodeDataForMediaTypes() Text = Constants.Conventions.MediaTypes.Article, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); var svgUniqueId = new Guid("c4b1efcf-a9d5-41c4-9621-e9d273b52a9c"); ConditionalInsert( @@ -1075,9 +998,7 @@ private void CreateNodeDataForMediaTypes() Text = "Vector Graphics (SVG)", NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); } private void CreateNodeDataForMemberTypes() @@ -1099,32 +1020,30 @@ private void CreateNodeDataForMemberTypes() Text = Constants.Conventions.MemberTypes.DefaultAlias, NodeObjectType = Constants.ObjectTypes.MemberType, CreateDate = DateTime.UtcNow, - }, - Constants.DatabaseSchema.Tables.Node, - "id"); + }); } private void CreateLockData() { // all lock objects - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.Servers, Name = "Servers" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.ContentTypes, Name = "ContentTypes" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.ContentTree, Name = "ContentTree" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MediaTypes, Name = "MediaTypes" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MediaTree, Name = "MediaTree" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MemberTypes, Name = "MemberTypes" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MemberTree, Name = "MemberTree" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.Domains, Name = "Domains" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.KeyValues, Name = "KeyValues" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.Languages, Name = "Languages" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.ScheduledPublishing, Name = "ScheduledPublishing" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MainDom, Name = "MainDom" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.WebhookRequest, Name = "WebhookRequest" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.WebhookLogs, Name = "WebhookLogs" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.LongRunningOperations, Name = "LongRunningOperations" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.DocumentUrls, Name = "DocumentUrls" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.DistributedJobs, Name = "DistributedJobs" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.CacheVersion, Name = "CacheVersion" }); + Insert(new LockDto { Id = Constants.Locks.Servers, Name = "Servers" }); + Insert(new LockDto { Id = Constants.Locks.ContentTypes, Name = "ContentTypes" }); + Insert(new LockDto { Id = Constants.Locks.ContentTree, Name = "ContentTree" }); + Insert(new LockDto { Id = Constants.Locks.MediaTypes, Name = "MediaTypes" }); + Insert(new LockDto { Id = Constants.Locks.MediaTree, Name = "MediaTree" }); + Insert(new LockDto { Id = Constants.Locks.MemberTypes, Name = "MemberTypes" }); + Insert(new LockDto { Id = Constants.Locks.MemberTree, Name = "MemberTree" }); + Insert(new LockDto { Id = Constants.Locks.Domains, Name = "Domains" }); + Insert(new LockDto { Id = Constants.Locks.KeyValues, Name = "KeyValues" }); + Insert(new LockDto { Id = Constants.Locks.Languages, Name = "Languages" }); + Insert(new LockDto { Id = Constants.Locks.ScheduledPublishing, Name = "ScheduledPublishing" }); + Insert(new LockDto { Id = Constants.Locks.MainDom, Name = "MainDom" }); + Insert(new LockDto { Id = Constants.Locks.WebhookRequest, Name = "WebhookRequest" }); + Insert(new LockDto { Id = Constants.Locks.WebhookLogs, Name = "WebhookLogs" }); + Insert(new LockDto { Id = Constants.Locks.LongRunningOperations, Name = "LongRunningOperations" }); + Insert(new LockDto { Id = Constants.Locks.DocumentUrls, Name = "DocumentUrls" }); + Insert(new LockDto { Id = Constants.Locks.DistributedJobs, Name = "DistributedJobs" }); + Insert(new LockDto { Id = Constants.Locks.CacheVersion, Name = "CacheVersion" }); } private void CreateContentTypeData() @@ -1135,269 +1054,213 @@ private void CreateContentTypeData() // Media types. if (_database.Exists(1031)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentType, - "pk", - false, - new ContentTypeDto - { - PrimaryKey = 532, - NodeId = 1031, - Alias = Constants.Conventions.MediaTypes.Folder, - Icon = Constants.Icons.MediaFolder, - Thumbnail = Constants.Icons.MediaFolder, - AllowAtRoot = true, - Variations = (byte)ContentVariation.Nothing, - ListView = Constants.DataTypes.Guids.ListViewMediaGuid - }); + Insert(new ContentTypeDto + { + PrimaryKey = 532, + NodeId = 1031, + Alias = Constants.Conventions.MediaTypes.Folder, + Icon = Constants.Icons.MediaFolder, + Thumbnail = Constants.Icons.MediaFolder, + AllowAtRoot = true, + Variations = (byte)ContentVariation.Nothing, + ListView = Constants.DataTypes.Guids.ListViewMediaGuid + }); } if (_database.Exists(1032)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentType, - "pk", - false, - new ContentTypeDto - { - PrimaryKey = 533, - NodeId = 1032, - Alias = Constants.Conventions.MediaTypes.Image, - Icon = Constants.Icons.MediaImage, - Thumbnail = Constants.Icons.MediaImage, - AllowAtRoot = true, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new ContentTypeDto + { + PrimaryKey = 533, + NodeId = 1032, + Alias = Constants.Conventions.MediaTypes.Image, + Icon = Constants.Icons.MediaImage, + Thumbnail = Constants.Icons.MediaImage, + AllowAtRoot = true, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(1033)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentType, - "pk", - false, - new ContentTypeDto - { - PrimaryKey = 534, - NodeId = 1033, - Alias = Constants.Conventions.MediaTypes.File, - Icon = Constants.Icons.MediaFile, - Thumbnail = Constants.Icons.MediaFile, - AllowAtRoot = true, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new ContentTypeDto + { + PrimaryKey = 534, + NodeId = 1033, + Alias = Constants.Conventions.MediaTypes.File, + Icon = Constants.Icons.MediaFile, + Thumbnail = Constants.Icons.MediaFile, + AllowAtRoot = true, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(1034)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentType, - "pk", - false, - new ContentTypeDto - { - PrimaryKey = 540, - NodeId = 1034, - Alias = Constants.Conventions.MediaTypes.VideoAlias, - Icon = Constants.Icons.MediaVideo, - Thumbnail = Constants.Icons.MediaVideo, - AllowAtRoot = true, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new ContentTypeDto + { + PrimaryKey = 540, + NodeId = 1034, + Alias = Constants.Conventions.MediaTypes.VideoAlias, + Icon = Constants.Icons.MediaVideo, + Thumbnail = Constants.Icons.MediaVideo, + AllowAtRoot = true, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(1035)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentType, - "pk", - false, - new ContentTypeDto - { - PrimaryKey = 541, - NodeId = 1035, - Alias = Constants.Conventions.MediaTypes.AudioAlias, - Icon = Constants.Icons.MediaAudio, - Thumbnail = Constants.Icons.MediaAudio, - AllowAtRoot = true, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new ContentTypeDto + { + PrimaryKey = 541, + NodeId = 1035, + Alias = Constants.Conventions.MediaTypes.AudioAlias, + Icon = Constants.Icons.MediaAudio, + Thumbnail = Constants.Icons.MediaAudio, + AllowAtRoot = true, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(1036)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentType, - "pk", - false, - new ContentTypeDto - { - PrimaryKey = 542, - NodeId = 1036, - Alias = Constants.Conventions.MediaTypes.ArticleAlias, - Icon = Constants.Icons.MediaArticle, - Thumbnail = Constants.Icons.MediaArticle, - AllowAtRoot = true, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new ContentTypeDto + { + PrimaryKey = 542, + NodeId = 1036, + Alias = Constants.Conventions.MediaTypes.ArticleAlias, + Icon = Constants.Icons.MediaArticle, + Thumbnail = Constants.Icons.MediaArticle, + AllowAtRoot = true, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(1037)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentType, - "pk", - false, - new ContentTypeDto - { - PrimaryKey = 543, - NodeId = 1037, - Alias = Constants.Conventions.MediaTypes.VectorGraphicsAlias, - Icon = Constants.Icons.MediaVectorGraphics, - Thumbnail = Constants.Icons.MediaVectorGraphics, - AllowAtRoot = true, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new ContentTypeDto + { + PrimaryKey = 543, + NodeId = 1037, + Alias = Constants.Conventions.MediaTypes.VectorGraphicsAlias, + Icon = Constants.Icons.MediaVectorGraphics, + Thumbnail = Constants.Icons.MediaVectorGraphics, + AllowAtRoot = true, + Variations = (byte)ContentVariation.Nothing, + }); } // Member type. if (_database.Exists(1044)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentType, - "pk", - false, - new ContentTypeDto - { - PrimaryKey = 531, - NodeId = 1044, - Alias = Constants.Conventions.MemberTypes.DefaultAlias, - Icon = Constants.Icons.Member, - Thumbnail = Constants.Icons.Member, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new ContentTypeDto + { + PrimaryKey = 531, + NodeId = 1044, + Alias = Constants.Conventions.MemberTypes.DefaultAlias, + Icon = Constants.Icons.Member, + Thumbnail = Constants.Icons.Member, + Variations = (byte)ContentVariation.Nothing, + }); } } - private void CreateUserData() => _database.Insert( - Constants.DatabaseSchema.Tables.User, - "id", - false, - new UserDto - { - Id = Constants.Security.SuperUserId, - Key = Constants.Security.SuperUserKey, - Disabled = false, - NoConsole = false, - UserName = "Administrator", - Login = "admin", - Password = "default", - Email = string.Empty, - UserLanguage = "en-US", - CreateDate = DateTime.UtcNow, - UpdateDate = DateTime.UtcNow, - }); + private void CreateUserData() => Insert(new UserDto + { + Id = Constants.Security.SuperUserId, + Key = Constants.Security.SuperUserKey, + Disabled = false, + NoConsole = false, + UserName = "Administrator", + Login = "admin", + Password = "default", + Email = string.Empty, + UserLanguage = "en-US", + CreateDate = DateTime.UtcNow, + UpdateDate = DateTime.UtcNow, + }); private void CreateUserGroupData() { - _database.Insert( - Constants.DatabaseSchema.Tables.UserGroup, - "id", - false, - new UserGroupDto - { - Id = 1, - Key = Constants.Security.AdminGroupKey, - StartMediaId = -1, - StartContentId = -1, - Alias = Constants.Security.AdminGroupAlias, - Name = "Administrators", - Description = "Users with full access to all sections and functionality", - CreateDate = DateTime.UtcNow, - UpdateDate = DateTime.UtcNow, - Icon = "icon-medal", - HasAccessToAllLanguages = true, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.UserGroup, - "id", - false, - new UserGroupDto - { - Id = 2, - Key = Constants.Security.WriterGroupKey, - StartMediaId = -1, - StartContentId = -1, - Alias = WriterGroupAlias, - Name = "Writers", - Description = "Users with permission to create and update but not publish content", - CreateDate = DateTime.UtcNow, - UpdateDate = DateTime.UtcNow, - Icon = "icon-edit", - HasAccessToAllLanguages = true, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.UserGroup, - "id", - false, - new UserGroupDto - { - Id = 3, - Key = Constants.Security.EditorGroupKey, - StartMediaId = -1, - StartContentId = -1, - Alias = EditorGroupAlias, - Name = "Editors", - Description = "Users with full permission to create, update and publish content", - CreateDate = DateTime.UtcNow, - UpdateDate = DateTime.UtcNow, - Icon = "icon-tools", - HasAccessToAllLanguages = true, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.UserGroup, - "id", - false, - new UserGroupDto - { - Id = 4, - Key = Constants.Security.TranslatorGroupKey, - StartMediaId = -1, - StartContentId = -1, - Alias = TranslatorGroupAlias, - Name = "Translators", - Description = "Users with permission to manage dictionary entries", - CreateDate = DateTime.UtcNow, - UpdateDate = DateTime.UtcNow, - Icon = "icon-globe", - HasAccessToAllLanguages = true, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.UserGroup, - "id", - false, - new UserGroupDto - { - Id = 5, - Key = Constants.Security.SensitiveDataGroupKey, - Alias = SensitiveDataGroupAlias, - Name = "Sensitive data", - Description = "Users with the specific permission to be able to manage properties and data marked as sensitive", - CreateDate = DateTime.UtcNow, - UpdateDate = DateTime.UtcNow, - Icon = "icon-lock", - HasAccessToAllLanguages = false, - }); + Insert(new UserGroupDto + { + Id = 1, + Key = Constants.Security.AdminGroupKey, + StartMediaId = -1, + StartContentId = -1, + Alias = Constants.Security.AdminGroupAlias, + Name = "Administrators", + Description = "Users with full access to all sections and functionality", + CreateDate = DateTime.UtcNow, + UpdateDate = DateTime.UtcNow, + Icon = "icon-medal", + HasAccessToAllLanguages = true, + }); + Insert(new UserGroupDto + { + Id = 2, + Key = Constants.Security.WriterGroupKey, + StartMediaId = -1, + StartContentId = -1, + Alias = WriterGroupAlias, + Name = "Writers", + Description = "Users with permission to create and update but not publish content", + CreateDate = DateTime.UtcNow, + UpdateDate = DateTime.UtcNow, + Icon = "icon-edit", + HasAccessToAllLanguages = true, + }); + Insert(new UserGroupDto + { + Id = 3, + Key = Constants.Security.EditorGroupKey, + StartMediaId = -1, + StartContentId = -1, + Alias = EditorGroupAlias, + Name = "Editors", + Description = "Users with full permission to create, update and publish content", + CreateDate = DateTime.UtcNow, + UpdateDate = DateTime.UtcNow, + Icon = "icon-tools", + HasAccessToAllLanguages = true, + }); + Insert(new UserGroupDto + { + Id = 4, + Key = Constants.Security.TranslatorGroupKey, + StartMediaId = -1, + StartContentId = -1, + Alias = TranslatorGroupAlias, + Name = "Translators", + Description = "Users with permission to manage dictionary entries", + CreateDate = DateTime.UtcNow, + UpdateDate = DateTime.UtcNow, + Icon = "icon-globe", + HasAccessToAllLanguages = true, + }); + Insert(new UserGroupDto + { + Id = 5, + Key = Constants.Security.SensitiveDataGroupKey, + Alias = SensitiveDataGroupAlias, + Name = "Sensitive data", + Description = "Users with the specific permission to be able to manage properties and data marked as sensitive", + CreateDate = DateTime.UtcNow, + UpdateDate = DateTime.UtcNow, + Icon = "icon-lock", + HasAccessToAllLanguages = false, + }); } private void CreateUser2UserGroupData() { - _database.Insert(new User2UserGroupDto + Insert(new User2UserGroupDto { UserGroupId = 1, UserId = Constants.Security.SuperUserId, }); // add super to admins - _database.Insert(new User2UserGroupDto + Insert(new User2UserGroupDto { UserGroupId = 5, UserId = Constants.Security.SuperUserId, @@ -1406,22 +1269,22 @@ private void CreateUser2UserGroupData() private void CreateUserGroup2AppData() { - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Content }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Packages }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Media }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Members }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Settings }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Users }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Forms }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Translation }); - - _database.Insert(new UserGroup2AppDto { UserGroupId = 2, AppAlias = Constants.Applications.Content }); - - _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Content }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Media }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Forms }); - - _database.Insert(new UserGroup2AppDto { UserGroupId = 4, AppAlias = Constants.Applications.Translation }); + Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Content }); + Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Packages }); + Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Media }); + Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Members }); + Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Settings }); + Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Users }); + Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Forms }); + Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Translation }); + + Insert(new UserGroup2AppDto { UserGroupId = 2, AppAlias = Constants.Applications.Content }); + + Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Content }); + Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Media }); + Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Forms }); + + Insert(new UserGroup2AppDto { UserGroupId = 4, AppAlias = Constants.Applications.Translation }); } private void CreatePropertyTypeGroupData() @@ -1432,122 +1295,94 @@ private void CreatePropertyTypeGroupData() // Media property groups. if (_database.Exists(1032)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyTypeGroup, - "id", - false, - new PropertyTypeGroupDto - { - Id = 3, - UniqueId = new Guid(Constants.PropertyTypeGroups.Image), - ContentTypeNodeId = 1032, - Text = "Image", - Alias = "image", - SortOrder = 1, - }); + Insert(new PropertyTypeGroupDto + { + Id = 3, + UniqueId = new Guid(Constants.PropertyTypeGroups.Image), + ContentTypeNodeId = 1032, + Text = "Image", + Alias = "image", + SortOrder = 1, + }); } if (_database.Exists(1033)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyTypeGroup, - "id", - false, - new PropertyTypeGroupDto - { - Id = 4, - UniqueId = new Guid(Constants.PropertyTypeGroups.File), - ContentTypeNodeId = 1033, - Text = "File", - Alias = "file", - SortOrder = 1, - }); + Insert(new PropertyTypeGroupDto + { + Id = 4, + UniqueId = new Guid(Constants.PropertyTypeGroups.File), + ContentTypeNodeId = 1033, + Text = "File", + Alias = "file", + SortOrder = 1, + }); } if (_database.Exists(1034)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyTypeGroup, - "id", - false, - new PropertyTypeGroupDto - { - Id = 52, - UniqueId = new Guid(Constants.PropertyTypeGroups.Video), - ContentTypeNodeId = 1034, - Text = "Video", - Alias = "video", - SortOrder = 1, - }); + Insert(new PropertyTypeGroupDto + { + Id = 52, + UniqueId = new Guid(Constants.PropertyTypeGroups.Video), + ContentTypeNodeId = 1034, + Text = "Video", + Alias = "video", + SortOrder = 1, + }); } if (_database.Exists(1035)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyTypeGroup, - "id", - false, - new PropertyTypeGroupDto - { - Id = 53, - UniqueId = new Guid(Constants.PropertyTypeGroups.Audio), - ContentTypeNodeId = 1035, - Text = "Audio", - Alias = "audio", - SortOrder = 1, - }); + Insert(new PropertyTypeGroupDto + { + Id = 53, + UniqueId = new Guid(Constants.PropertyTypeGroups.Audio), + ContentTypeNodeId = 1035, + Text = "Audio", + Alias = "audio", + SortOrder = 1, + }); } if (_database.Exists(1036)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyTypeGroup, - "id", - false, - new PropertyTypeGroupDto - { - Id = 54, - UniqueId = new Guid(Constants.PropertyTypeGroups.Article), - ContentTypeNodeId = 1036, - Text = "Article", - Alias = "article", - SortOrder = 1, - }); + Insert(new PropertyTypeGroupDto + { + Id = 54, + UniqueId = new Guid(Constants.PropertyTypeGroups.Article), + ContentTypeNodeId = 1036, + Text = "Article", + Alias = "article", + SortOrder = 1, + }); } if (_database.Exists(1037)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyTypeGroup, - "id", - false, - new PropertyTypeGroupDto - { - Id = 55, - UniqueId = new Guid(Constants.PropertyTypeGroups.VectorGraphics), - ContentTypeNodeId = 1037, - Text = "Vector Graphics", - Alias = "vectorGraphics", - SortOrder = 1, - }); + Insert(new PropertyTypeGroupDto + { + Id = 55, + UniqueId = new Guid(Constants.PropertyTypeGroups.VectorGraphics), + ContentTypeNodeId = 1037, + Text = "Vector Graphics", + Alias = "vectorGraphics", + SortOrder = 1, + }); } // Membership property group. if (_database.Exists(1044)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyTypeGroup, - "id", - false, - new PropertyTypeGroupDto - { - Id = 11, - UniqueId = new Guid(Constants.PropertyTypeGroups.Membership), - ContentTypeNodeId = 1044, - Text = Constants.Conventions.Member.StandardPropertiesGroupName, - Alias = Constants.Conventions.Member.StandardPropertiesGroupAlias, - SortOrder = 1, - }); + Insert(new PropertyTypeGroupDto + { + Id = 11, + UniqueId = new Guid(Constants.PropertyTypeGroups.Membership), + ContentTypeNodeId = 1044, + Text = Constants.Conventions.Member.StandardPropertiesGroupName, + Alias = Constants.Conventions.Member.StandardPropertiesGroupAlias, + SortOrder = 1, + }); } } @@ -1559,430 +1394,346 @@ private void CreatePropertyTypeData() // Media property types. if (_database.Exists(3)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 6, - UniqueId = new Guid("B646CA8F-E469-4FC2-A48A-D4DC1AA64A53"), - DataTypeId = Constants.DataTypes.ImageCropper, - ContentTypeId = 1032, - PropertyTypeGroupId = 3, - Alias = Constants.Conventions.Media.File, - Name = "Image", - SortOrder = 0, - Mandatory = true, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 7, - UniqueId = new Guid("A68D453B-1F62-44F4-9F71-0B6BBD43C355"), - DataTypeId = Constants.DataTypes.LabelPixels, - ContentTypeId = 1032, - PropertyTypeGroupId = 3, - Alias = Constants.Conventions.Media.Width, - Name = "Width", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 8, - UniqueId = new Guid("854087F6-648B-40ED-BC98-B8A9789E80B9"), - DataTypeId = Constants.DataTypes.LabelPixels, - ContentTypeId = 1032, - PropertyTypeGroupId = 3, - Alias = Constants.Conventions.Media.Height, - Name = "Height", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 9, - UniqueId = new Guid("BD4C5ACE-26E3-4A8B-AF1A-E8206A35FA07"), - DataTypeId = Constants.DataTypes.LabelBytes, - ContentTypeId = 1032, - PropertyTypeGroupId = 3, - Alias = Constants.Conventions.Media.Bytes, - Name = "File size", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 10, - UniqueId = new Guid("F7786FE8-724A-4ED0-B244-72546DB32A92"), - DataTypeId = Constants.DataTypes.LabelString, - ContentTypeId = 1032, - PropertyTypeGroupId = 3, - Alias = Constants.Conventions.Media.Extension, - Name = "File extension", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new PropertyTypeDto + { + Id = 6, + UniqueId = new Guid("B646CA8F-E469-4FC2-A48A-D4DC1AA64A53"), + DataTypeId = Constants.DataTypes.ImageCropper, + ContentTypeId = 1032, + PropertyTypeGroupId = 3, + Alias = Constants.Conventions.Media.File, + Name = "Image", + SortOrder = 0, + Mandatory = true, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 7, + UniqueId = new Guid("A68D453B-1F62-44F4-9F71-0B6BBD43C355"), + DataTypeId = Constants.DataTypes.LabelPixels, + ContentTypeId = 1032, + PropertyTypeGroupId = 3, + Alias = Constants.Conventions.Media.Width, + Name = "Width", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 8, + UniqueId = new Guid("854087F6-648B-40ED-BC98-B8A9789E80B9"), + DataTypeId = Constants.DataTypes.LabelPixels, + ContentTypeId = 1032, + PropertyTypeGroupId = 3, + Alias = Constants.Conventions.Media.Height, + Name = "Height", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 9, + UniqueId = new Guid("BD4C5ACE-26E3-4A8B-AF1A-E8206A35FA07"), + DataTypeId = Constants.DataTypes.LabelBytes, + ContentTypeId = 1032, + PropertyTypeGroupId = 3, + Alias = Constants.Conventions.Media.Bytes, + Name = "File size", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 10, + UniqueId = new Guid("F7786FE8-724A-4ED0-B244-72546DB32A92"), + DataTypeId = Constants.DataTypes.LabelString, + ContentTypeId = 1032, + PropertyTypeGroupId = 3, + Alias = Constants.Conventions.Media.Extension, + Name = "File extension", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(4)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 24, - UniqueId = new Guid("A0FB68F3-F427-47A6-AFCE-536FFA5B64E9"), - DataTypeId = Constants.DataTypes.Upload, - ContentTypeId = 1033, - PropertyTypeGroupId = 4, - Alias = Constants.Conventions.Media.File, - Name = "File", - SortOrder = 0, - Mandatory = true, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 25, - UniqueId = new Guid("3531C0A3-4E0A-4324-A621-B9D3822B071F"), - DataTypeId = Constants.DataTypes.LabelString, - ContentTypeId = 1033, - PropertyTypeGroupId = 4, - Alias = Constants.Conventions.Media.Extension, - Name = "File extension", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 26, - UniqueId = new Guid("F9527050-59BC-43E4-8FA8-1658D1319FF5"), - DataTypeId = Constants.DataTypes.LabelBytes, - ContentTypeId = 1033, - PropertyTypeGroupId = 4, - Alias = Constants.Conventions.Media.Bytes, - Name = "File size", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new PropertyTypeDto + { + Id = 24, + UniqueId = new Guid("A0FB68F3-F427-47A6-AFCE-536FFA5B64E9"), + DataTypeId = Constants.DataTypes.Upload, + ContentTypeId = 1033, + PropertyTypeGroupId = 4, + Alias = Constants.Conventions.Media.File, + Name = "File", + SortOrder = 0, + Mandatory = true, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 25, + UniqueId = new Guid("3531C0A3-4E0A-4324-A621-B9D3822B071F"), + DataTypeId = Constants.DataTypes.LabelString, + ContentTypeId = 1033, + PropertyTypeGroupId = 4, + Alias = Constants.Conventions.Media.Extension, + Name = "File extension", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 26, + UniqueId = new Guid("F9527050-59BC-43E4-8FA8-1658D1319FF5"), + DataTypeId = Constants.DataTypes.LabelBytes, + ContentTypeId = 1033, + PropertyTypeGroupId = 4, + Alias = Constants.Conventions.Media.Bytes, + Name = "File size", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(52)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 40, - UniqueId = new Guid("BED8AB97-D85F-44D2-A8B9-AEF6893F9610"), - DataTypeId = Constants.DataTypes.UploadVideo, - ContentTypeId = 1034, - PropertyTypeGroupId = 52, - Alias = Constants.Conventions.Media.File, - Name = "Video", - SortOrder = 0, - Mandatory = true, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 41, - UniqueId = new Guid("EDD2B3FD-1E57-4E57-935E-096DEFCCDC9B"), - DataTypeId = Constants.DataTypes.LabelString, - ContentTypeId = 1034, - PropertyTypeGroupId = 52, - Alias = Constants.Conventions.Media.Extension, - Name = "File extension", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 42, - UniqueId = new Guid("180EEECF-1F00-409E-8234-BBA967E08B0A"), - DataTypeId = Constants.DataTypes.LabelBytes, - ContentTypeId = 1034, - PropertyTypeGroupId = 52, - Alias = Constants.Conventions.Media.Bytes, - Name = "File size", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new PropertyTypeDto + { + Id = 40, + UniqueId = new Guid("BED8AB97-D85F-44D2-A8B9-AEF6893F9610"), + DataTypeId = Constants.DataTypes.UploadVideo, + ContentTypeId = 1034, + PropertyTypeGroupId = 52, + Alias = Constants.Conventions.Media.File, + Name = "Video", + SortOrder = 0, + Mandatory = true, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 41, + UniqueId = new Guid("EDD2B3FD-1E57-4E57-935E-096DEFCCDC9B"), + DataTypeId = Constants.DataTypes.LabelString, + ContentTypeId = 1034, + PropertyTypeGroupId = 52, + Alias = Constants.Conventions.Media.Extension, + Name = "File extension", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 42, + UniqueId = new Guid("180EEECF-1F00-409E-8234-BBA967E08B0A"), + DataTypeId = Constants.DataTypes.LabelBytes, + ContentTypeId = 1034, + PropertyTypeGroupId = 52, + Alias = Constants.Conventions.Media.Bytes, + Name = "File size", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(53)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 43, - UniqueId = new Guid("1F48D730-F174-4684-AFAD-A335E59D84A0"), - DataTypeId = Constants.DataTypes.UploadAudio, - ContentTypeId = 1035, - PropertyTypeGroupId = 53, - Alias = Constants.Conventions.Media.File, - Name = "Audio", - SortOrder = 0, - Mandatory = true, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 44, - UniqueId = new Guid("1BEE433F-A21A-4031-8E03-AF01BB8D2DE9"), - DataTypeId = Constants.DataTypes.LabelString, - ContentTypeId = 1035, - PropertyTypeGroupId = 53, - Alias = Constants.Conventions.Media.Extension, - Name = "File extension", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 45, - UniqueId = new Guid("3CBF538A-29AB-4317-A9EB-BBCDF1A54260"), - DataTypeId = Constants.DataTypes.LabelBytes, - ContentTypeId = 1035, - PropertyTypeGroupId = 53, - Alias = Constants.Conventions.Media.Bytes, - Name = "File size", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new PropertyTypeDto + { + Id = 43, + UniqueId = new Guid("1F48D730-F174-4684-AFAD-A335E59D84A0"), + DataTypeId = Constants.DataTypes.UploadAudio, + ContentTypeId = 1035, + PropertyTypeGroupId = 53, + Alias = Constants.Conventions.Media.File, + Name = "Audio", + SortOrder = 0, + Mandatory = true, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 44, + UniqueId = new Guid("1BEE433F-A21A-4031-8E03-AF01BB8D2DE9"), + DataTypeId = Constants.DataTypes.LabelString, + ContentTypeId = 1035, + PropertyTypeGroupId = 53, + Alias = Constants.Conventions.Media.Extension, + Name = "File extension", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 45, + UniqueId = new Guid("3CBF538A-29AB-4317-A9EB-BBCDF1A54260"), + DataTypeId = Constants.DataTypes.LabelBytes, + ContentTypeId = 1035, + PropertyTypeGroupId = 53, + Alias = Constants.Conventions.Media.Bytes, + Name = "File size", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(54)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 46, - UniqueId = new Guid("E5C8C2D0-2D82-4F01-B53A-45A1D1CBF19C"), - DataTypeId = Constants.DataTypes.UploadArticle, - ContentTypeId = 1036, - PropertyTypeGroupId = 54, - Alias = Constants.Conventions.Media.File, - Name = "Article", - SortOrder = 0, - Mandatory = true, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 47, - UniqueId = new Guid("EF1B4AF7-36DE-45EB-8C18-A2DE07319227"), - DataTypeId = Constants.DataTypes.LabelString, - ContentTypeId = 1036, - PropertyTypeGroupId = 54, - Alias = Constants.Conventions.Media.Extension, - Name = "File extension", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 48, - UniqueId = new Guid("AAB7D00C-7209-4337-BE3F-A4421C8D79A0"), - DataTypeId = Constants.DataTypes.LabelBytes, - ContentTypeId = 1036, - PropertyTypeGroupId = 54, - Alias = Constants.Conventions.Media.Bytes, - Name = "File size", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new PropertyTypeDto + { + Id = 46, + UniqueId = new Guid("E5C8C2D0-2D82-4F01-B53A-45A1D1CBF19C"), + DataTypeId = Constants.DataTypes.UploadArticle, + ContentTypeId = 1036, + PropertyTypeGroupId = 54, + Alias = Constants.Conventions.Media.File, + Name = "Article", + SortOrder = 0, + Mandatory = true, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 47, + UniqueId = new Guid("EF1B4AF7-36DE-45EB-8C18-A2DE07319227"), + DataTypeId = Constants.DataTypes.LabelString, + ContentTypeId = 1036, + PropertyTypeGroupId = 54, + Alias = Constants.Conventions.Media.Extension, + Name = "File extension", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 48, + UniqueId = new Guid("AAB7D00C-7209-4337-BE3F-A4421C8D79A0"), + DataTypeId = Constants.DataTypes.LabelBytes, + ContentTypeId = 1036, + PropertyTypeGroupId = 54, + Alias = Constants.Conventions.Media.Bytes, + Name = "File size", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); } if (_database.Exists(55)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 49, - UniqueId = new Guid("E2A2BDF2-971B-483E-95A1-4104CC06AF26"), - DataTypeId = Constants.DataTypes.UploadVectorGraphics, - ContentTypeId = 1037, - PropertyTypeGroupId = 55, - Alias = Constants.Conventions.Media.File, - Name = "Vector Graphics", - SortOrder = 0, - Mandatory = true, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 50, - UniqueId = new Guid("0F25A89E-2EB7-49BC-A7B4-759A7E4C69F2"), - DataTypeId = Constants.DataTypes.LabelString, - ContentTypeId = 1037, - PropertyTypeGroupId = 55, - Alias = Constants.Conventions.Media.Extension, - Name = "File extension", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 51, - UniqueId = new Guid("09A07AFF-861D-4769-A2B0-C165EBD43D39"), - DataTypeId = Constants.DataTypes.LabelBytes, - ContentTypeId = 1037, - PropertyTypeGroupId = 55, - Alias = Constants.Conventions.Media.Bytes, - Name = "File size", - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new PropertyTypeDto + { + Id = 49, + UniqueId = new Guid("E2A2BDF2-971B-483E-95A1-4104CC06AF26"), + DataTypeId = Constants.DataTypes.UploadVectorGraphics, + ContentTypeId = 1037, + PropertyTypeGroupId = 55, + Alias = Constants.Conventions.Media.File, + Name = "Vector Graphics", + SortOrder = 0, + Mandatory = true, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 50, + UniqueId = new Guid("0F25A89E-2EB7-49BC-A7B4-759A7E4C69F2"), + DataTypeId = Constants.DataTypes.LabelString, + ContentTypeId = 1037, + PropertyTypeGroupId = 55, + Alias = Constants.Conventions.Media.Extension, + Name = "File extension", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); + Insert(new PropertyTypeDto + { + Id = 51, + UniqueId = new Guid("09A07AFF-861D-4769-A2B0-C165EBD43D39"), + DataTypeId = Constants.DataTypes.LabelBytes, + ContentTypeId = 1037, + PropertyTypeGroupId = 55, + Alias = Constants.Conventions.Media.Bytes, + Name = "File size", + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); } // Membership property types. if (_database.Exists(11)) { - _database.Insert( - Constants.DatabaseSchema.Tables.PropertyType, - "id", - false, - new PropertyTypeDto - { - Id = 28, - UniqueId = new Guid("70F24C26-1C0E-4053-BD8E-E9E6E4EC4C01"), - DataTypeId = Constants.DataTypes.Textarea, - ContentTypeId = 1044, - PropertyTypeGroupId = 11, - Alias = Constants.Conventions.Member.Comments, - Name = Constants.Conventions.Member.CommentsLabel, - SortOrder = 0, - Mandatory = false, - ValidationRegExp = null, - Description = null, - Variations = (byte)ContentVariation.Nothing, - }); + Insert(new PropertyTypeDto + { + Id = 28, + UniqueId = new Guid("70F24C26-1C0E-4053-BD8E-E9E6E4EC4C01"), + DataTypeId = Constants.DataTypes.Textarea, + ContentTypeId = 1044, + PropertyTypeGroupId = 11, + Alias = Constants.Conventions.Member.Comments, + Name = Constants.Conventions.Member.CommentsLabel, + SortOrder = 0, + Mandatory = false, + ValidationRegExp = null, + Description = null, + Variations = (byte)ContentVariation.Nothing, + }); } } @@ -2004,14 +1755,13 @@ private void CreateLanguageData() continue; } - var dto = new LanguageDto + Insert(new LanguageDto { Id = id, IsoCode = culture.Name, CultureName = culture.EnglishName, IsDefault = isDefault, - }; - _database.Insert(Constants.DatabaseSchema.Tables.Language, "id", false, dto); + }); isDefault = false; id += 1; } @@ -2024,9 +1774,13 @@ private void CreateLanguageData() ConditionalInsert( Constants.Configuration.NamedOptions.InstallDefaultData.Languages, culture.Name, - new LanguageDto { Id = 1, IsoCode = culture.Name, CultureName = culture.EnglishName, IsDefault = true }, - Constants.DatabaseSchema.Tables.Language, - "id"); + new LanguageDto + { + Id = 1, + IsoCode = culture.Name, + CultureName = culture.EnglishName, + IsDefault = true + }); } } } @@ -2046,7 +1800,7 @@ private bool TryCreateCulture(string isoCode, [NotNullWhen(true)] out CultureInf } } - private void CreateContentChildTypeData() + private void CreateContentTypeAllowedContentType() { // Insert data if the corresponding Node records exist (which may or may not have been created depending on configuration // of media types to create). @@ -2055,21 +1809,13 @@ private void CreateContentChildTypeData() return; } - _database.Insert( - Constants.DatabaseSchema.Tables.ContentChildType, - "Id", - false, - new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = 1031 }); + Insert(new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = 1031 }); for (var i = 1032; i <= 1037; i++) { if (_database.Exists(i)) { - _database.Insert( - Constants.DatabaseSchema.Tables.ContentChildType, - "Id", - false, - new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = i }); + Insert(new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = i }); } } } @@ -2087,7 +1833,7 @@ void InsertDataTypeDto(int id, string editorAlias, string editorUiAlias, string if (_database.Exists(id)) { - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, dataTypeDto); + Insert(dataTypeDto); } } @@ -2104,93 +1850,69 @@ string GridCollectionView(string collectionViewType) => // of data types to create). if (_database.Exists(Constants.DataTypes.Boolean)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.Boolean, - EditorAlias = Constants.PropertyEditors.Aliases.Boolean, - EditorUiAlias = "Umb.PropertyEditorUi.Toggle", - DbType = "Integer", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.Boolean, + EditorAlias = Constants.PropertyEditors.Aliases.Boolean, + EditorUiAlias = "Umb.PropertyEditorUi.Toggle", + DbType = "Integer", + }); } if (_database.Exists(-51)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = -51, - EditorAlias = Constants.PropertyEditors.Aliases.Integer, - EditorUiAlias = "Umb.PropertyEditorUi.Integer", - DbType = "Integer", - }); + Insert(new DataTypeDto + { + NodeId = -51, + EditorAlias = Constants.PropertyEditors.Aliases.Integer, + EditorUiAlias = "Umb.PropertyEditorUi.Integer", + DbType = "Integer", + }); } if (_database.Exists(Constants.DataTypes.RichtextEditor)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.RichtextEditor, - EditorAlias = Constants.PropertyEditors.Aliases.RichText, - EditorUiAlias = "Umb.PropertyEditorUi.Tiptap", - DbType = "Ntext", - Configuration = "{\"extensions\": [\"Umb.Tiptap.RichTextEssentials\", \"Umb.Tiptap.Anchor\", \"Umb.Tiptap.Block\", \"Umb.Tiptap.Blockquote\", \"Umb.Tiptap.Bold\", \"Umb.Tiptap.BulletList\", \"Umb.Tiptap.CodeBlock\", \"Umb.Tiptap.Embed\", \"Umb.Tiptap.Figure\", \"Umb.Tiptap.Heading\", \"Umb.Tiptap.HorizontalRule\", \"Umb.Tiptap.HtmlAttributeClass\", \"Umb.Tiptap.HtmlAttributeDataset\", \"Umb.Tiptap.HtmlAttributeId\", \"Umb.Tiptap.HtmlAttributeStyle\", \"Umb.Tiptap.HtmlTagDiv\", \"Umb.Tiptap.HtmlTagSpan\", \"Umb.Tiptap.Image\", \"Umb.Tiptap.Italic\", \"Umb.Tiptap.Link\", \"Umb.Tiptap.MediaUpload\", \"Umb.Tiptap.OrderedList\", \"Umb.Tiptap.Strike\", \"Umb.Tiptap.Subscript\", \"Umb.Tiptap.Superscript\", \"Umb.Tiptap.Table\", \"Umb.Tiptap.TextAlign\", \"Umb.Tiptap.TextDirection\", \"Umb.Tiptap.TextIndent\", \"Umb.Tiptap.TrailingNode\", \"Umb.Tiptap.Underline\"], \"maxImageSize\": 500, \"overlaySize\": \"medium\", \"toolbar\": [[[\"Umb.Tiptap.Toolbar.SourceEditor\"], [\"Umb.Tiptap.Toolbar.Bold\", \"Umb.Tiptap.Toolbar.Italic\", \"Umb.Tiptap.Toolbar.Underline\"], [\"Umb.Tiptap.Toolbar.TextAlignLeft\", \"Umb.Tiptap.Toolbar.TextAlignCenter\", \"Umb.Tiptap.Toolbar.TextAlignRight\"], [\"Umb.Tiptap.Toolbar.BulletList\", \"Umb.Tiptap.Toolbar.OrderedList\"], [\"Umb.Tiptap.Toolbar.Blockquote\", \"Umb.Tiptap.Toolbar.HorizontalRule\"], [\"Umb.Tiptap.Toolbar.Link\", \"Umb.Tiptap.Toolbar.Unlink\"], [\"Umb.Tiptap.Toolbar.MediaPicker\", \"Umb.Tiptap.Toolbar.EmbeddedMedia\"]]]}", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.RichtextEditor, + EditorAlias = Constants.PropertyEditors.Aliases.RichText, + EditorUiAlias = "Umb.PropertyEditorUi.Tiptap", + DbType = "Ntext", + Configuration = "{\"extensions\": [\"Umb.Tiptap.RichTextEssentials\", \"Umb.Tiptap.Anchor\", \"Umb.Tiptap.Block\", \"Umb.Tiptap.Blockquote\", \"Umb.Tiptap.Bold\", \"Umb.Tiptap.BulletList\", \"Umb.Tiptap.CodeBlock\", \"Umb.Tiptap.Embed\", \"Umb.Tiptap.Figure\", \"Umb.Tiptap.Heading\", \"Umb.Tiptap.HorizontalRule\", \"Umb.Tiptap.HtmlAttributeClass\", \"Umb.Tiptap.HtmlAttributeDataset\", \"Umb.Tiptap.HtmlAttributeId\", \"Umb.Tiptap.HtmlAttributeStyle\", \"Umb.Tiptap.HtmlTagDiv\", \"Umb.Tiptap.HtmlTagSpan\", \"Umb.Tiptap.Image\", \"Umb.Tiptap.Italic\", \"Umb.Tiptap.Link\", \"Umb.Tiptap.MediaUpload\", \"Umb.Tiptap.OrderedList\", \"Umb.Tiptap.Strike\", \"Umb.Tiptap.Subscript\", \"Umb.Tiptap.Superscript\", \"Umb.Tiptap.Table\", \"Umb.Tiptap.TextAlign\", \"Umb.Tiptap.TextDirection\", \"Umb.Tiptap.TextIndent\", \"Umb.Tiptap.TrailingNode\", \"Umb.Tiptap.Underline\"], \"maxImageSize\": 500, \"overlaySize\": \"medium\", \"toolbar\": [[[\"Umb.Tiptap.Toolbar.SourceEditor\"], [\"Umb.Tiptap.Toolbar.Bold\", \"Umb.Tiptap.Toolbar.Italic\", \"Umb.Tiptap.Toolbar.Underline\"], [\"Umb.Tiptap.Toolbar.TextAlignLeft\", \"Umb.Tiptap.Toolbar.TextAlignCenter\", \"Umb.Tiptap.Toolbar.TextAlignRight\"], [\"Umb.Tiptap.Toolbar.BulletList\", \"Umb.Tiptap.Toolbar.OrderedList\"], [\"Umb.Tiptap.Toolbar.Blockquote\", \"Umb.Tiptap.Toolbar.HorizontalRule\"], [\"Umb.Tiptap.Toolbar.Link\", \"Umb.Tiptap.Toolbar.Unlink\"], [\"Umb.Tiptap.Toolbar.MediaPicker\", \"Umb.Tiptap.Toolbar.EmbeddedMedia\"]]]}", + }); } if (_database.Exists(Constants.DataTypes.Textbox)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.Textbox, - EditorAlias = Constants.PropertyEditors.Aliases.TextBox, - EditorUiAlias = "Umb.PropertyEditorUi.TextBox", - DbType = "Nvarchar", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.Textbox, + EditorAlias = Constants.PropertyEditors.Aliases.TextBox, + EditorUiAlias = "Umb.PropertyEditorUi.TextBox", + DbType = "Nvarchar", + }); } if (_database.Exists(Constants.DataTypes.Textarea)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.Textarea, - EditorAlias = Constants.PropertyEditors.Aliases.TextArea, - EditorUiAlias = "Umb.PropertyEditorUi.TextArea", - DbType = "Ntext", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.Textarea, + EditorAlias = Constants.PropertyEditors.Aliases.TextArea, + EditorUiAlias = "Umb.PropertyEditorUi.TextArea", + DbType = "Ntext", + }); } if (_database.Exists(Constants.DataTypes.Upload)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.Upload, - EditorAlias = Constants.PropertyEditors.Aliases.UploadField, - EditorUiAlias = "Umb.PropertyEditorUi.UploadField", - DbType = "Nvarchar", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.Upload, + EditorAlias = Constants.PropertyEditors.Aliases.UploadField, + EditorUiAlias = "Umb.PropertyEditorUi.UploadField", + DbType = "Nvarchar", + }); } InsertDataTypeDto( @@ -2244,33 +1966,25 @@ string GridCollectionView(string collectionViewType) => if (_database.Exists(Constants.DataTypes.DateTime)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.DateTime, - EditorAlias = Constants.PropertyEditors.Aliases.DateTime, - EditorUiAlias = "Umb.PropertyEditorUi.DatePicker", - DbType = "Date", - Configuration = "{\"format\":\"YYYY-MM-DD HH:mm:ss\"}", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.DateTime, + EditorAlias = Constants.PropertyEditors.Aliases.DateTime, + EditorUiAlias = "Umb.PropertyEditorUi.DatePicker", + DbType = "Date", + Configuration = "{\"format\":\"YYYY-MM-DD HH:mm:ss\"}", + }); } if (_database.Exists(-37)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = -37, - EditorAlias = Constants.PropertyEditors.Aliases.ColorPicker, - EditorUiAlias = "Umb.PropertyEditorUi.ColorPicker", - DbType = "Nvarchar", - }); + Insert(new DataTypeDto + { + NodeId = -37, + EditorAlias = Constants.PropertyEditors.Aliases.ColorPicker, + EditorUiAlias = "Umb.PropertyEditorUi.ColorPicker", + DbType = "Nvarchar", + }); } InsertDataTypeDto( @@ -2282,33 +1996,25 @@ string GridCollectionView(string collectionViewType) => if (_database.Exists(-40)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = -40, - EditorAlias = Constants.PropertyEditors.Aliases.RadioButtonList, - EditorUiAlias = "Umb.PropertyEditorUi.RadioButtonList", - DbType = "Nvarchar", - }); + Insert(new DataTypeDto + { + NodeId = -40, + EditorAlias = Constants.PropertyEditors.Aliases.RadioButtonList, + EditorUiAlias = "Umb.PropertyEditorUi.RadioButtonList", + DbType = "Nvarchar", + }); } if (_database.Exists(-41)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = -41, - EditorAlias = Constants.PropertyEditors.Aliases.DateTime, - EditorUiAlias = "Umb.PropertyEditorUi.DatePicker", - DbType = "Date", - Configuration = "{\"format\":\"YYYY-MM-DD\"}", - }); + Insert(new DataTypeDto + { + NodeId = -41, + EditorAlias = Constants.PropertyEditors.Aliases.DateTime, + EditorUiAlias = "Umb.PropertyEditorUi.DatePicker", + DbType = "Date", + Configuration = "{\"format\":\"YYYY-MM-DD\"}", + }); } InsertDataTypeDto( @@ -2320,298 +2026,226 @@ string GridCollectionView(string collectionViewType) => if (_database.Exists(-43)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = -43, - EditorAlias = Constants.PropertyEditors.Aliases.CheckBoxList, - EditorUiAlias = "Umb.PropertyEditorUi.CheckBoxList", - DbType = "Ntext", - }); + Insert(new DataTypeDto + { + NodeId = -43, + EditorAlias = Constants.PropertyEditors.Aliases.CheckBoxList, + EditorUiAlias = "Umb.PropertyEditorUi.CheckBoxList", + DbType = "Ntext", + }); } if (_database.Exists(Constants.DataTypes.Tags)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.Tags, - EditorAlias = Constants.PropertyEditors.Aliases.Tags, - EditorUiAlias = "Umb.PropertyEditorUi.Tags", - DbType = "Ntext", - Configuration = "{\"group\":\"default\", \"storageType\":\"Json\"}", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.Tags, + EditorAlias = Constants.PropertyEditors.Aliases.Tags, + EditorUiAlias = "Umb.PropertyEditorUi.Tags", + DbType = "Ntext", + Configuration = "{\"group\":\"default\", \"storageType\":\"Json\"}", + }); } if (_database.Exists(Constants.DataTypes.ImageCropper)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.ImageCropper, - EditorAlias = Constants.PropertyEditors.Aliases.ImageCropper, - EditorUiAlias = "Umb.PropertyEditorUi.ImageCropper", - DbType = "Ntext", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.ImageCropper, + EditorAlias = Constants.PropertyEditors.Aliases.ImageCropper, + EditorUiAlias = "Umb.PropertyEditorUi.ImageCropper", + DbType = "Ntext", + }); } if (_database.Exists(Constants.DataTypes.DefaultContentListView)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.DefaultContentListView, - EditorAlias = Constants.PropertyEditors.Aliases.ListView, - EditorUiAlias = "Umb.PropertyEditorUi.Collection", - DbType = "Nvarchar", - Configuration = + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.DefaultContentListView, + EditorAlias = Constants.PropertyEditors.Aliases.ListView, + EditorUiAlias = "Umb.PropertyEditorUi.Collection", + DbType = "Nvarchar", + Configuration = "{\"pageSize\":100, \"orderBy\":\"updateDate\", \"orderDirection\":\"desc\", \"layouts\":" + Layouts("Document") + ", \"includeProperties\":[{\"alias\":\"updateDate\",\"header\":\"Last edited\",\"isSystem\":true},{\"alias\":\"creator\",\"header\":\"Updated by\",\"isSystem\":true}]}", - }); + }); } if (_database.Exists(Constants.DataTypes.DefaultMediaListView)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.DefaultMediaListView, - EditorAlias = Constants.PropertyEditors.Aliases.ListView, - EditorUiAlias = "Umb.PropertyEditorUi.Collection", - DbType = "Nvarchar", - Configuration = + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.DefaultMediaListView, + EditorAlias = Constants.PropertyEditors.Aliases.ListView, + EditorUiAlias = "Umb.PropertyEditorUi.Collection", + DbType = "Nvarchar", + Configuration = "{\"pageSize\":100, \"orderBy\":\"updateDate\", \"orderDirection\":\"desc\", \"layouts\":" + Layouts("Media") + ", \"includeProperties\":[{\"alias\":\"updateDate\",\"header\":\"Last edited\",\"isSystem\":true},{\"alias\":\"creator\",\"header\":\"Updated by\",\"isSystem\":true}]}", - }); + }); } if (_database.Exists(Constants.DataTypes.DefaultMembersListView)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.DefaultMembersListView, - EditorAlias = Constants.PropertyEditors.Aliases.ListView, - EditorUiAlias = "Umb.PropertyEditorUi.Collection", - DbType = "Nvarchar", - Configuration = + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.DefaultMembersListView, + EditorAlias = Constants.PropertyEditors.Aliases.ListView, + EditorUiAlias = "Umb.PropertyEditorUi.Collection", + DbType = "Nvarchar", + Configuration = "{\"pageSize\":10, \"orderBy\":\"username\", \"orderDirection\":\"asc\", \"includeProperties\":[{\"alias\":\"username\",\"isSystem\":true},{\"alias\":\"email\",\"isSystem\":true},{\"alias\":\"updateDate\",\"header\":\"Last edited\",\"isSystem\":true}]}", - }); + }); } // New UDI pickers with newer Ids if (_database.Exists(1046)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = 1046, - EditorAlias = Constants.PropertyEditors.Aliases.ContentPicker, - EditorUiAlias = "Umb.PropertyEditorUi.DocumentPicker", - DbType = "Nvarchar", - }); + Insert(new DataTypeDto + { + NodeId = 1046, + EditorAlias = Constants.PropertyEditors.Aliases.ContentPicker, + EditorUiAlias = "Umb.PropertyEditorUi.DocumentPicker", + DbType = "Nvarchar", + }); } if (_database.Exists(1047)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = 1047, - EditorAlias = Constants.PropertyEditors.Aliases.MemberPicker, - EditorUiAlias = "Umb.PropertyEditorUi.MemberPicker", - DbType = "Nvarchar", - }); + Insert(new DataTypeDto + { + NodeId = 1047, + EditorAlias = Constants.PropertyEditors.Aliases.MemberPicker, + EditorUiAlias = "Umb.PropertyEditorUi.MemberPicker", + DbType = "Nvarchar", + }); } if (_database.Exists(1050)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = 1050, - EditorAlias = Constants.PropertyEditors.Aliases.MultiUrlPicker, - EditorUiAlias = "Umb.PropertyEditorUi.MultiUrlPicker", - DbType = "Ntext", - }); + Insert(new DataTypeDto + { + NodeId = 1050, + EditorAlias = Constants.PropertyEditors.Aliases.MultiUrlPicker, + EditorUiAlias = "Umb.PropertyEditorUi.MultiUrlPicker", + DbType = "Ntext", + }); } if (_database.Exists(Constants.DataTypes.UploadVideo)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.UploadVideo, - EditorAlias = Constants.PropertyEditors.Aliases.UploadField, - EditorUiAlias = "Umb.PropertyEditorUi.UploadField", - DbType = "Nvarchar", - Configuration = + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.UploadVideo, + EditorAlias = Constants.PropertyEditors.Aliases.UploadField, + EditorUiAlias = "Umb.PropertyEditorUi.UploadField", + DbType = "Nvarchar", + Configuration = "{\"fileExtensions\":[\"mp4\",\"webm\",\"ogv\"]}", - }); + }); } if (_database.Exists(Constants.DataTypes.UploadAudio)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.UploadAudio, - EditorAlias = Constants.PropertyEditors.Aliases.UploadField, - EditorUiAlias = "Umb.PropertyEditorUi.UploadField", - DbType = "Nvarchar", - Configuration = + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.UploadAudio, + EditorAlias = Constants.PropertyEditors.Aliases.UploadField, + EditorUiAlias = "Umb.PropertyEditorUi.UploadField", + DbType = "Nvarchar", + Configuration = "{\"fileExtensions\":[\"mp3\",\"weba\",\"oga\",\"opus\"]}", - }); + }); } if (_database.Exists(Constants.DataTypes.UploadArticle)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.UploadArticle, - EditorAlias = Constants.PropertyEditors.Aliases.UploadField, - EditorUiAlias = "Umb.PropertyEditorUi.UploadField", - DbType = "Nvarchar", - Configuration = + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.UploadArticle, + EditorAlias = Constants.PropertyEditors.Aliases.UploadField, + EditorUiAlias = "Umb.PropertyEditorUi.UploadField", + DbType = "Nvarchar", + Configuration = "{\"fileExtensions\":[\"pdf\",\"docx\",\"doc\"]}", - }); + }); } if (_database.Exists(Constants.DataTypes.UploadVectorGraphics)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = Constants.DataTypes.UploadVectorGraphics, - EditorAlias = Constants.PropertyEditors.Aliases.UploadField, - EditorUiAlias = "Umb.PropertyEditorUi.UploadField", - DbType = "Nvarchar", - Configuration = "{\"fileExtensions\":[\"svg\"]}", - }); + Insert(new DataTypeDto + { + NodeId = Constants.DataTypes.UploadVectorGraphics, + EditorAlias = Constants.PropertyEditors.Aliases.UploadField, + EditorUiAlias = "Umb.PropertyEditorUi.UploadField", + DbType = "Nvarchar", + Configuration = "{\"fileExtensions\":[\"svg\"]}", + }); } if (_database.Exists(1051)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = 1051, - EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker3, - EditorUiAlias = "Umb.PropertyEditorUi.MediaPicker", - DbType = "Ntext", - Configuration = "{\"multiple\": false, \"validationLimit\":{\"min\":0,\"max\":1}}", - }); + Insert(new DataTypeDto + { + NodeId = 1051, + EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker3, + EditorUiAlias = "Umb.PropertyEditorUi.MediaPicker", + DbType = "Ntext", + Configuration = "{\"multiple\": false, \"validationLimit\":{\"min\":0,\"max\":1}}", + }); } if (_database.Exists(1052)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = 1052, - EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker3, - EditorUiAlias = "Umb.PropertyEditorUi.MediaPicker", - DbType = "Ntext", - Configuration = "{\"multiple\": true}", - }); + Insert(new DataTypeDto + { + NodeId = 1052, + EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker3, + EditorUiAlias = "Umb.PropertyEditorUi.MediaPicker", + DbType = "Ntext", + Configuration = "{\"multiple\": true}", + }); } if (_database.Exists(1053)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = 1053, - EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker3, - EditorUiAlias = "Umb.PropertyEditorUi.MediaPicker", - DbType = "Ntext", - Configuration = "{\"filter\":\"" + ImageMediaTypeKey + + Insert(new DataTypeDto + { + NodeId = 1053, + EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker3, + EditorUiAlias = "Umb.PropertyEditorUi.MediaPicker", + DbType = "Ntext", + Configuration = "{\"filter\":\"" + ImageMediaTypeKey + "\", \"multiple\": false, \"validationLimit\":{\"min\":0,\"max\":1}}", - }); + }); } if (_database.Exists(1054)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = 1054, - EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker3, - EditorUiAlias = "Umb.PropertyEditorUi.MediaPicker", - DbType = "Ntext", - Configuration = "{\"filter\":\"" + ImageMediaTypeKey + + Insert(new DataTypeDto + { + NodeId = 1054, + EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker3, + EditorUiAlias = "Umb.PropertyEditorUi.MediaPicker", + DbType = "Ntext", + Configuration = "{\"filter\":\"" + ImageMediaTypeKey + "\", \"multiple\": true}", - }); + }); } if (_database.Exists(1055)) { - _database.Insert( - Constants.DatabaseSchema.Tables.DataType, - "pk", - false, - new DataTypeDto - { - NodeId = 1055, - EditorAlias = Constants.PropertyEditors.Aliases.DateTimeWithTimeZone, - EditorUiAlias = "Umb.PropertyEditorUi.DateTimeWithTimeZonePicker", - DbType = "Ntext", - Configuration = "{\"timeFormat\": \"HH:mm\", \"timeZones\": {\"mode\": \"all\"}}", - }); + Insert(new DataTypeDto + { + NodeId = 1055, + EditorAlias = Constants.PropertyEditors.Aliases.DateTimeWithTimeZone, + EditorUiAlias = "Umb.PropertyEditorUi.DateTimeWithTimeZonePicker", + DbType = "Ntext", + Configuration = "{\"timeFormat\": \"HH:mm\", \"timeZones\": {\"mode\": \"all\"}}", + }); } } @@ -2677,19 +2311,18 @@ private void CreateRelationTypeData( bool dual, bool isDependency) { - var relationType = new RelationTypeDto - { - Id = id, - Alias = alias, - ChildObjectType = childObjectType, - ParentObjectType = parentObjectType, - Dual = dual, - Name = name, - IsDependency = isDependency, - }; - relationType.UniqueId = CreateUniqueRelationTypeId(relationType.Alias, relationType.Name); - - _database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType); + Insert( + new RelationTypeDto + { + Id = id, + Alias = alias, + ChildObjectType = childObjectType, + ParentObjectType = parentObjectType, + Dual = dual, + Name = name, + IsDependency = isDependency, + UniqueId = CreateUniqueRelationTypeId(alias, name) + }); } private void CreateKeyValueData() @@ -2699,22 +2332,13 @@ private void CreateKeyValueData() var stateValueKey = upgrader.StateValueKey; var finalState = upgrader.Plan.FinalState; - _database.Insert( - Constants.DatabaseSchema.Tables.KeyValue, - "key", - false, - new KeyValueDto { Key = stateValueKey, Value = finalState, UpdateDate = DateTime.UtcNow }); - + Insert(new KeyValueDto { Key = stateValueKey, Value = finalState, UpdateDate = DateTime.UtcNow }); upgrader = new Upgrader(new UmbracoPremigrationPlan()); stateValueKey = upgrader.StateValueKey; finalState = upgrader.Plan.FinalState; - _database.Insert( - Constants.DatabaseSchema.Tables.KeyValue, - "key", - false, - new KeyValueDto { Key = stateValueKey, Value = finalState, UpdateDate = DateTime.UtcNow }); + Insert(new KeyValueDto { Key = stateValueKey, Value = finalState, UpdateDate = DateTime.UtcNow }); } private void CreateLogViewerQueryData() @@ -2723,20 +2347,21 @@ private void CreateLogViewerQueryData() { LogViewerQueryDto dto = _defaultLogQueries[i]; dto.Id = i + 1; - _database.Insert(Constants.DatabaseSchema.Tables.LogViewerQuery, "id", false, dto); + Insert(dto); } } - private void ConditionalInsert( - string configKey, - string id, - TDto dto, - string tableName, - string primaryKeyName, - bool autoIncrement = false) + private void ConditionalInsert(string configKey, string id, TDto dto) { - var alwaysInsert = _entitiesToAlwaysCreate.ContainsKey(configKey) && - _entitiesToAlwaysCreate[configKey].InvariantContains(id); + + // var alwaysInsert = _entitiesToAlwaysCreate.ContainsKey(configKey) && + // _entitiesToAlwaysCreate[configKey].InvariantContains(id); + // copilot rewrite: + var alwaysInsert = false; + if (_entitiesToAlwaysCreate.TryGetValue(configKey, out IList? alwaysCreateIds)) + { + alwaysInsert = alwaysCreateIds.InvariantContains(id); + } InstallDefaultDataSettings installDefaultDataSettings = _installDefaultDataSettings.Get(configKey); @@ -2763,6 +2388,57 @@ private void ConditionalInsert( return; } - _database.Insert(tableName, primaryKeyName, autoIncrement, dto); + Insert(dto); + } + + private object Insert(T poco) + { + ArgumentNullException.ThrowIfNull(poco); + ArgumentNullException.ThrowIfNull(_pocoDataFactory); + + PocoData pocoData = _pocoDataFactory.ForType(poco.GetType()); + var autoIncrement = UseAutoIncrement(); // GetAutoIncrementByInt(pocoData, poco); + + return _database.Insert( + pocoData.TableInfo.TableName, + null, + autoIncrement, + poco); } + + private bool GetAutoIncrementByInt(PocoData pocoData, T poco) + { + ArgumentNullException.ThrowIfNull(pocoData); + + var autoIncrement = pocoData.TableInfo.AutoIncrement; + bool useAutoIncrement = ((IUmbracoDatabase)_database).SqlContext.DatabaseType is PostgreSQLDatabaseType; + + if (useAutoIncrement || autoIncrement) + { + var primaryColumnValues = pocoData.GetPrimaryKeyValues(poco); + if (primaryColumnValues.Length == 0) + { + autoIncrement = false; + } + else if (primaryColumnValues.Length > 1) + { + autoIncrement = false; + } + else if (primaryColumnValues.FirstOrDefault() is int) + { + autoIncrement = false; + } + } + + return autoIncrement; + } + + private bool UseAutoIncrement() + { + return ((IUmbracoDatabase)_database).SqlContext.DatabaseType is PostgreSQLDatabaseType; + } + +#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type. +#pragma warning restore CS8604 // Possible null reference argument. +#pragma warning restore SA1117 // Parameters should be on same line or separate lines } diff --git a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs index c6dc22ee97de..e463d4c6a1cb 100644 --- a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs +++ b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs @@ -103,22 +103,22 @@ public class DatabaseSchemaCreator private readonly ILoggerFactory _loggerFactory; private readonly IUmbracoVersion _umbracoVersion; - public DatabaseSchemaCreator( - IUmbracoDatabase? database, - ILogger logger, - ILoggerFactory loggerFactory, - IUmbracoVersion umbracoVersion, - IEventAggregator eventAggregator, - IOptionsMonitor defaultDataCreationSettings) - { - _database = database ?? throw new ArgumentNullException(nameof(database)); - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); - _umbracoVersion = umbracoVersion ?? throw new ArgumentNullException(nameof(umbracoVersion)); - _eventAggregator = eventAggregator; - _installDefaultDataSettings = defaultDataCreationSettings; // TODO (V13): Rename this parameter to installDefaultDataSettings. - - if (_database?.SqlContext?.SqlSyntax == null) + public DatabaseSchemaCreator( + IUmbracoDatabase? database, + ILogger logger, + ILoggerFactory loggerFactory, + IUmbracoVersion umbracoVersion, + IEventAggregator eventAggregator, + IOptionsMonitor installDefaultDataSettings) + { + _database = database ?? throw new ArgumentNullException(nameof(database)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); + _umbracoVersion = umbracoVersion ?? throw new ArgumentNullException(nameof(umbracoVersion)); + _eventAggregator = eventAggregator; + _installDefaultDataSettings = installDefaultDataSettings; + + if (_database.SqlContext?.SqlSyntax == null) { throw new InvalidOperationException("No SqlContext has been assigned to the database"); } @@ -516,9 +516,16 @@ internal void CreateTable(bool overwrite, Type modelType, DatabaseDataCreator da dataCreation.InitializeBaseData(tableName); - if (SqlSyntax.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity)) + if (tableDefinition.Columns.Any(x => x.IsIdentity)) { - _database.Execute(new Sql($"SET IDENTITY_INSERT {SqlSyntax.GetQuotedTableName(tableName)} OFF;")); + if (SqlSyntax.SupportsIdentityInsert()) + { + _database.Execute(new Sql($"SET IDENTITY_INSERT {SqlSyntax.GetQuotedTableName(tableName)} OFF;")); + } + else if (SqlSyntax.SupportsSequences()) + { + SqlSyntax.AlterSequences(_database, tableName); + } } if (overwrite) diff --git a/src/Umbraco.Infrastructure/Migrations/Notifications/DatabaseSchemaInitializedNotification.cs b/src/Umbraco.Infrastructure/Migrations/Notifications/DatabaseSchemaInitializedNotification.cs new file mode 100644 index 000000000000..15165c73fa0e --- /dev/null +++ b/src/Umbraco.Infrastructure/Migrations/Notifications/DatabaseSchemaInitializedNotification.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; +using NPoco; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Infrastructure.Persistence; + +namespace Umbraco.Cms.Infrastructure.Migrations.Notifications +{ + public sealed class DatabaseSchemaInitializedNotification : StatefulNotification + { + public DatabaseSchemaInitializedNotification(IUmbracoDatabase database) + { + Database = database; + } + + public IUmbracoDatabase Database { get; } + } +} diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs index 9558b7e6c1d5..e4148b632a0d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class AccessDto { public const string TableName = Constants.DatabaseSchema.Tables.Access; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoAccess", AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs index f6d97c72b0ce..db100cc5e4e9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs @@ -6,12 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class AccessRuleDto { public const string TableName = Constants.DatabaseSchema.Tables.AccessRule; - [Column("id")] + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoAccessRule", AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs index cc88e37f18f9..e0fd1a5a486f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class AuditEntryDto { public const string TableName = Constants.DatabaseSchema.Tables.AuditEntry; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs index 0c274c31956a..160918932578 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] public class CacheInstructionDto { public const string TableName = Constants.DatabaseSchema.Tables.CacheInstruction; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [NullSetting(NullSetting = NullSettings.NotNull)] [PrimaryKeyColumn(AutoIncrement = true, Name = "PK_umbracoCacheInstruction")] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs index 6445f992e8ad..d7de1e8209f1 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] public class ConsentDto { public const string TableName = Constants.DatabaseSchema.Tables.Consent; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs index d9a03c644fee..ff907623ccc2 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs @@ -5,29 +5,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("nodeId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class ContentDto { public const string TableName = Constants.DatabaseSchema.Tables.Content; + public const string PrimaryKeyName = Constants.DatabaseSchema.NodeIdName; + public const string ContentTypeIdName = "contentTypeId"; - [Column("nodeId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } - [Column("contentTypeId")] - [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] + [Column(ContentTypeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] public int ContentTypeId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "nodeId")] + [Reference(ReferenceType.OneToOne, ColumnName = PrimaryKeyName)] public NodeDto NodeDto { get; set; } = null!; // although a content has many content versions, // they can only be loaded one by one (as several content), // so this here is a OneToOne reference [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = "nodeId")] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = PrimaryKeyName)] public ContentVersionDto ContentVersionDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs index 2ec29776718d..57367faf2119 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("nodeId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class ContentNuDto { public const string TableName = Constants.DatabaseSchema.Tables.NodeData; + public const string PrimaryKeyName = "nodeId"; - [Column("nodeId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsContentNu", OnColumns = "nodeId, published")] [ForeignKey(typeof(ContentDto), Column = "nodeId", OnDelete = Rule.Cascade)] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs index 5f575b77ef1f..d7bba22fe868 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class ContentScheduleDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentSchedule; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs index a8d8a28864e6..4c6fea5be1ba 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs @@ -9,13 +9,15 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ContentType2ContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentTypeTree; + public const string PrimaryKeyName = "parentContentTypeId"; + public const string ChildIdName = "childContentTypeId"; - [Column("parentContentTypeId")] - [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentType2ContentType", OnColumns = "parentContentTypeId, childContentTypeId")] + [Column(PrimaryKeyName)] + [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentType2ContentType", OnColumns = $"{PrimaryKeyName}, {ChildIdName}")] [ForeignKey(typeof(NodeDto), Name = "FK_cmsContentType2ContentType_umbracoNode_parent")] public int ParentId { get; set; } - [Column("childContentTypeId")] + [Column(ChildIdName)] [ForeignKey(typeof(NodeDto), Name = "FK_cmsContentType2ContentType_umbracoNode_child")] public int ChildId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs index 95d2feec3dae..0e3b7a635984 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs @@ -5,18 +5,20 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("Id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class ContentTypeAllowedContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentChildType; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string AllowedIdName = "AllowedId"; - [Column("Id")] + [Column(PrimaryKeyName)] [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = "nodeId")] - [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = "Id, AllowedId")] + [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = $"{PrimaryKeyName}, AllowedId")] public int Id { get; set; } - [Column("AllowedId")] + [Column(AllowedIdName)] [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = "nodeId")] public int AllowedId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs index 6abef6eeba2c..ec9269606511 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs @@ -5,21 +5,23 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("pk")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal class ContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentType; + public const string PrimaryKeyName = "pk"; + public const string NodeIdName = "nodeId"; private string? _alias; // Public constants to bind properties between DTOs public const string VariationsColumnName = "variations"; - [Column("pk")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(IdentitySeed = 700)] public int PrimaryKey { get; set; } - [Column("nodeId")] + [Column(NodeIdName)] [ForeignKey(typeof(NodeDto))] [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsContentType")] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs index fd8504789105..6dcb53948c28 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("contentTypeNodeId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class ContentTypeTemplateDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentType; + public const string PrimaryKeyName = "contentTypeNodeId"; - [Column("contentTypeNodeId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsDocumentType", OnColumns = "contentTypeNodeId, templateNodeId")] [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] [ForeignKey(typeof(NodeDto))] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs index 9a808bf6f101..34cbd1639f6c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("contentTypeId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class ContentVersionCleanupPolicyDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersionCleanupPolicy; + public const string PrimaryKeyName = "contentTypeId"; - [Column("contentTypeId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoContentVersionCleanupPolicy")] [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] public int ContentTypeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs index faa3ad4f1f8e..3d0295643569 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs @@ -5,19 +5,20 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class ContentVersionCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersionCultureVariation; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; private int? _updateUserId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } [Column("versionId")] - [ForeignKey(typeof(ContentVersionDto))] + [ForeignKey(typeof(ContentVersionDto), Name = "FK_umbContentVersionCultureVariation_umbContentVersion_id")] // needs to be shorter than 64 chars for e.g. PostgreSQL [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = "versionId,languageId", IncludeColumns = "id,name,date,availableUserId")] public int VersionId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs index a3302be04673..454ac7c87b3a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs @@ -6,14 +6,15 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] public class ContentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersion; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; private int? _userId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs index 52eb4bb7e3d3..d74026fd05ee 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs @@ -7,12 +7,13 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] public class CreatedPackageSchemaDto { public const string TableName = Constants.DatabaseSchema.Tables.CreatedPackageSchema; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs index 9e8b4dee22c2..6ff1cbae1728 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs @@ -5,12 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("nodeId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class DataTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.DataType; - [Column("nodeId")] + public const string PrimaryKeyName = "nodeId"; + + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs index ed47cd786438..df5d3d10b517 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("pk")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] public class DictionaryDto // public as required to be accessible from Deploy for the RepairDictionaryIdsWorkItem. { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryEntry; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNamePK; - [Column("pk")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } @@ -31,6 +32,6 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public string Key { get; set; } = null!; [ResultColumn] - [Reference(ReferenceType.Many, ColumnName = "UniqueId", ReferenceMemberName = "UniqueId")] + [Reference(ReferenceType.Many, ColumnName = "uniqueId", ReferenceMemberName = "uniqueId")] public List LanguageTextDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs index 2f88eae5b2ca..75c5095b6d92 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs @@ -1,4 +1,4 @@ -using NPoco; +using NPoco; using Umbraco.Cms.Core; using Umbraco.Cms.Infrastructure.Persistence.DatabaseAnnotations; using Umbraco.Cms.Infrastructure.Persistence.DatabaseModelDefinitions; @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] internal sealed class DistributedJobDto { public const string TableName = Constants.DatabaseSchema.Tables.DistributedJob; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs index e093a6ac549c..280982cbe913 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs @@ -5,16 +5,17 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class DocumentCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentCultureVariation; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs index b78538f349e5..435a539cc544 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs @@ -5,17 +5,18 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("nodeId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class DocumentDto { public const string TableName = Constants.DatabaseSchema.Tables.Document; + public const string PrimaryKeyName = "nodeId"; // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; - [Column("nodeId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs index 133df789c77a..abb6e2b6dd3d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] public class DocumentUrlDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentUrl; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Clustered = false, AutoIncrement = true)] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs index f99a6676be6e..23b75b52dd23 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class DocumentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentVersion; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentVersionDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = "id,published", IncludeColumns = "templateId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs index 0d052689024e..c4f5477a0094 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class DomainDto { public const string TableName = Constants.DatabaseSchema.Tables.Domain; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs index 8720542ee6e0..7149cd38d5de 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs @@ -7,12 +7,13 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey("Id")] +[PrimaryKey(PrimaryKeyName)] internal sealed class ExternalLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.ExternalLogin; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs index 9e937f8d79a3..d82384e3d827 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs @@ -7,12 +7,13 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey("Id")] +[PrimaryKey(PrimaryKeyName)] internal sealed class ExternalLoginTokenDto { public const string TableName = Constants.DatabaseSchema.Tables.ExternalLoginToken; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs index 7a9257423fd0..aa86e31da66d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs @@ -7,13 +7,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("key", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class KeyValueDto { public const string TableName = Constants.DatabaseSchema.Tables.KeyValue; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameKey; - [Column("key")] + [Column(PrimaryKeyName)] [Length(256)] [PrimaryKeyColumn(AutoIncrement = false, Clustered = true)] public string Key { get; set; } = null!; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs index ac63485a0550..1a212a9a1041 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs @@ -5,11 +5,12 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class LanguageDto { public const string TableName = Constants.DatabaseSchema.Tables.Language; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; // Public constants to bind properties between DTOs public const string IsoCodeColumnName = "languageISOCode"; @@ -17,7 +18,7 @@ internal sealed class LanguageDto /// /// Gets or sets the identifier of the language. /// - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(IdentitySeed = 2)] public short Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs index 1cbc3a9a1557..590da8682919 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs @@ -5,22 +5,23 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("pk")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] public class LanguageTextDto { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryValue; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNamePK; - [Column("pk")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } [Column("languageId")] [ForeignKey(typeof(LanguageDto), Column = "id")] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_languageId", ForColumns = "languageId,UniqueId")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_languageId", ForColumns = "languageId,uniqueId")] public int LanguageId { get; set; } - [Column("UniqueId")] + [Column("uniqueId")] [ForeignKey(typeof(DictionaryDto), Column = "id")] public Guid UniqueId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs index 15c25a5ed3aa..47298aa2885b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs @@ -1,4 +1,4 @@ -using NPoco; +using NPoco; using Umbraco.Cms.Infrastructure.Persistence.DatabaseAnnotations; using Constants = Umbraco.Cms.Core.Constants; @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("machineId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class LastSyncedDto { internal const string TableName = Constants.DatabaseSchema.Tables.LastSynced; + public const string PrimaryKeyName = "machineId"; - [Column("machineId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_lastSyncedMachineId", AutoIncrement = false, Clustered = true)] public required string MachineId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs index c3015bfe8cc5..1f08567666ce 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs @@ -4,12 +4,15 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; -[TableName(Constants.DatabaseSchema.Tables.Lock)] -[PrimaryKey("id", AutoIncrement = false)] +[TableName(TableName)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class LockDto { - [Column("id")] + public const string TableName = Constants.DatabaseSchema.Tables.Lock; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoLock", AutoIncrement = false)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs index 3abc067dad26..094a7823f3c2 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs @@ -6,15 +6,16 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class LogDto { public const string TableName = Constants.DatabaseSchema.Tables.Log; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; private int? _userId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs index 24209968795b..ba5692832d6e 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class LogViewerQueryDto { public const string TableName = Constants.DatabaseSchema.Tables.LogViewerQuery; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs index 677eed7edaeb..901fc4c24763 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal class LongRunningOperationDto { public const string TableName = Constants.DatabaseSchema.Tables.LongRunningOperation; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoLongRunningOperation", AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs index fd47f17696cd..001838eb96f5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class MediaVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.MediaVersion; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentVersionDto))] [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName, ForColumns = "id, path")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs index 4925f2dd82c5..9b6e45a9027b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs @@ -5,14 +5,15 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("Member", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class Member2MemberGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.Member2MemberGroup; + public const string PrimaryKeyName = "Member"; - [Column("Member")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = "Member, MemberGroup")] + [Column(PrimaryKeyName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyName}, MemberGroup")] [ForeignKey(typeof(MemberDto))] public int Member { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs index 98435f8ce082..240d1bfbafb6 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("nodeId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class MemberDto { private const string TableName = Constants.DatabaseSchema.Tables.Member; + public const string PrimaryKeyName = "nodeId"; - [Column("nodeId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs index e0487661aee8..0d55bdd40087 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs @@ -4,18 +4,22 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; -[TableName(Constants.DatabaseSchema.Tables.MemberPropertyType)] -[PrimaryKey("pk")] +[TableName(TableName)] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class MemberPropertyTypeDto { - [Column("pk")] + public const string TableName = Constants.DatabaseSchema.Tables.MemberPropertyType; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNamePK; + public const string NodeIdName = "nodeId"; + + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column("NodeId")] + [Column(NodeIdName)] [ForeignKey(typeof(NodeDto))] - [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] + [ForeignKey(typeof(ContentTypeDto), Column = NodeIdName)] public int NodeId { get; set; } [Column("propertytypeId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs index 38e8e3627163..72c77eb2a79d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs @@ -6,19 +6,22 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] public class NodeDto { public const string TableName = Constants.DatabaseSchema.Tables.Node; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; public const int NodeIdSeed = 1060; // Public constants to bind properties between DTOs - public const string IdColumnName = "id"; + public const string IdColumnName = PrimaryKeyName; public const string KeyColumnName = "uniqueId"; public const string ParentIdColumnName = "parentId"; public const string SortOrderColumnName = "sortOrder"; public const string TrashedColumnName = "trashed"; + public const string NodeObjectTypeColumnName = "nodeObjectType"; + public const string TextColumnName = "text"; private int? _userId; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs index d824edc645ee..d4e5a87e749d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs @@ -6,27 +6,30 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class PropertyDataDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyData; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PropertyTypeIdName = "propertyTypeId"; + public const string VersionIdName = "versionId"; public const int VarcharLength = 512; public const int SegmentLength = 256; private decimal? _decimalValue; // pk, not used at the moment (never updating) - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("versionId")] + [Column(VersionIdName)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = "versionId,propertyTypeId,languageId,segment")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{PropertyTypeIdName},languageId,segment")] public int VersionId { get; set; } - [Column("propertyTypeId")] + [Column(PropertyTypeIdName)] [ForeignKey(typeof(PropertyTypeDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_PropertyTypeId")] public int PropertyTypeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs index 2913e20c7c24..997b82d0c0c5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs @@ -6,27 +6,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal class PropertyTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string DataTypeIdName = "dataTypeId"; + public const string ContentTypeIdName = "contentTypeId"; + public const string PorpertyTypeGroupIdName = "propertyTypeGroupId"; private string? _alias; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(IdentitySeed = 100)] public int Id { get; set; } - [Column("dataTypeId")] - [ForeignKey(typeof(DataTypeDto), Column = "nodeId")] + [Column(DataTypeIdName)] + [ForeignKey(typeof(DataTypeDto), Column = DataTypeDto.PrimaryKeyName)] public int DataTypeId { get; set; } - [Column("contentTypeId")] - [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] + [Column(ContentTypeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] public int ContentTypeId { get; set; } - [Column("propertyTypeGroupId")] + [Column(PorpertyTypeGroupIdName)] [NullSetting(NullSetting = NullSettings.Null)] [ForeignKey(typeof(PropertyTypeGroupDto))] public int? PropertyTypeGroupId { get; set; } @@ -79,7 +83,7 @@ internal class PropertyTypeDto [Reference(ReferenceType.OneToOne, ColumnName = "DataTypeId")] public DataTypeDto DataTypeDto { get; set; } = null!; - [Column("UniqueId")] + [Column("uniqueId")] [NullSetting(NullSetting = NullSettings.NotNull)] [Constraint(Default = SystemMethods.NewGuid)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsPropertyTypeUniqueID")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs index b9fcadd0739d..5457c449dbee 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs @@ -6,24 +6,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] internal sealed class PropertyTypeGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string ContentTypeNodeIdName = "contenttypeNodeId"; + public const string UniqueIdName = "uniqueId"; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(IdentitySeed = 56)] public int Id { get; set; } - [Column("uniqueID")] + [Column(UniqueIdName)] [NullSetting(NullSetting = NullSettings.NotNull)] [Constraint(Default = SystemMethods.NewGuid)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsPropertyTypeGroupUniqueID")] public Guid UniqueId { get; set; } - [Column("contenttypeNodeId")] - [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] + [Column(ContentTypeNodeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] public int ContentTypeNodeId { get; set; } [Column("type")] @@ -40,6 +43,6 @@ internal sealed class PropertyTypeGroupDto public int SortOrder { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = "PropertyTypeGroupId")] + [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.PorpertyTypeGroupIdName)] public List PropertyTypeDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs index 3269102562e9..a92a6b988606 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs @@ -4,13 +4,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] internal sealed class PropertyTypeGroupReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; + public const string PrimaryKeyName = "PropertyTypeGroupId"; // Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("PropertyTypeGroupId")] + [Column(PrimaryKeyName)] public int? Id { get; set; } [Column("PropertyGroupName")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs index 4c4e526693d1..f219dd65db39 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs @@ -4,13 +4,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class PropertyTypeReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; + public const string PrimaryKeyName = "PropertyTypeId"; // Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("PropertyTypeId")] + [Column(PrimaryKeyName)] public int? Id { get; set; } [Column("dataTypeId")] @@ -66,6 +67,6 @@ internal sealed class PropertyTypeReadOnlyDto [Column("dbType")] public string? DbType { get; set; } - [Column("UniqueID")] + [Column("uniqueId")] public Guid UniqueId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs index e5af86072150..53cc35c2f629 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs @@ -5,11 +5,12 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class RedirectUrlDto { public const string TableName = Constants.DatabaseSchema.Tables.RedirectUrl; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; public RedirectUrlDto() => CreateDateUtc = DateTime.UtcNow; @@ -19,7 +20,7 @@ internal sealed class RedirectUrlDto // problem is that the index key must be 900 bytes max. should we run without an index? done // some perfs comparisons, and running with an index on a hash is only slightly slower on // inserts, and much faster on reads, so... we have an index on a hash. - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoRedirectUrl", AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs index 5c15ca53fd9a..26af048cdbd2 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class RelationDto { public const string TableName = Constants.DatabaseSchema.Tables.Relation; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs index 20a43410b62f..8e7580ea38cf 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs @@ -5,15 +5,16 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class RelationTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.RelationType; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; public const int NodeIdSeed = 10; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(IdentitySeed = NodeIdSeed)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs index a06fceed9a5a..d1b973f2a2b7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("identifier", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class RepositoryCacheVersionDto { internal const string TableName = Constants.DatabaseSchema.Tables.RepositoryCacheVersion; + public const string PrimaryKeyName = "identifier"; - [Column("identifier")] + [Column(PrimaryKeyName)] [Length(256)] [PrimaryKeyColumn(Name = "PK_umbracoRepositoryCacheVersion", AutoIncrement = false, Clustered = true)] public required string Identifier { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs index 960697cf723a..ef19f51f03df 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class ServerRegistrationDto { public const string TableName = Constants.DatabaseSchema.Tables.Server; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs index 628b08974c8f..af75d03bd5d3 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class TagDto { public const string TableName = Constants.DatabaseSchema.Tables.Tag; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs index 627435b9632c..77073efc477c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("nodeId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class TagRelationshipDto { public const string TableName = Constants.DatabaseSchema.Tables.TagRelationship; + public const string PrimaryKeyName = "nodeId"; - [Column("nodeId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsTagRelationship", OnColumns = "nodeId, propertyTypeId, tagId")] [ForeignKey(typeof(ContentDto), Name = "FK_cmsTagRelationship_cmsContent", Column = "nodeId")] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_tagId_nodeId", ForColumns = "tagId,nodeId", IncludeColumns = "propertyTypeId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs index e1462a47fade..f11eab7f36e3 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("pk")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] internal sealed class TemplateDto { public const string TableName = Constants.DatabaseSchema.Tables.Template; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNamePK; - [Column("pk")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs index f40231cb6d12..df2ee262e5c1 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs @@ -6,12 +6,13 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey("Id")] +[PrimaryKey(PrimaryKeyName)] internal sealed class TwoFactorLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.TwoFactorLogin; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs index 9d433fb70a0b..bb28f81bf95c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs @@ -5,14 +5,15 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("userId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class User2ClientIdDto { public const string TableName = Constants.DatabaseSchema.Tables.User2ClientId; + public const string PrimaryKeyName = "userId"; - [Column("userId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = "userId, clientId")] + [Column(PrimaryKeyName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyName}, clientId")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs index e980230d7ff0..2a778d3bb778 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs @@ -5,18 +5,20 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("userId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class User2NodeNotifyDto { public const string TableName = Constants.DatabaseSchema.Tables.User2NodeNotify; + public const string PrimaryKeyName = "userId"; + public const string NodeIdColumnName = Constants.DatabaseSchema.NodeIdName; - [Column("userId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = "userId, nodeId, action")] + [Column(PrimaryKeyName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyName}, nodeId, action")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column("nodeId")] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs index d04da681cfa1..8c6780c2009f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("key", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class UserDataDto { public const string TableName = Constants.DatabaseSchema.Tables.UserData; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameKey; - [Column("key")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoUserDataDto", AutoIncrement = false)] public Guid Key { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs index abc655c3db64..f8254ac659e0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs @@ -6,11 +6,12 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] public class UserDto { public const string TableName = Constants.DatabaseSchema.Tables.User; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; public UserDto() { @@ -18,7 +19,7 @@ public UserDto() UserStartNodeDtos = new HashSet(); } - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_user")] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs index 4b71e1b7147a..09cdc8d25171 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] public class UserGroup2AppDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2App; + public const string PrimaryKeyName = "userGroupId"; // Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("userGroupId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = "userGroupId, app")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs index e1cfc16380ba..be32f86f3286 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs @@ -5,23 +5,25 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] public class UserGroup2GranularPermissionDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2GranularPermission; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string UniqueIdName = Constants.DatabaseSchema.UniqueIdName; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoUserGroup2GranularPermissionDto", AutoIncrement = true)] public int Id { get; set; } [Column("userGroupKey")] - [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UserGroupKey_UniqueId", IncludeColumns = "uniqueId")] - [ForeignKey(typeof(UserGroupDto), Column = "key")] + [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UserGroupKey_UniqueId", IncludeColumns = UniqueIdName)] + [ForeignKey(typeof(UserGroupDto), Column = UserGroupDto.KeyColumnName)] public Guid UserGroupKey { get; set; } - [Column("uniqueId")] - [ForeignKey(typeof(NodeDto), Column = "uniqueId")] + [Column(UniqueIdName)] + [ForeignKey(typeof(NodeDto), Column = UniqueIdName)] [NullSetting(NullSetting = NullSettings.Null)] [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UniqueId")] public Guid? UniqueId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs index ac095e6e4276..e5d180341b38 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] public class UserGroup2PermissionDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2Permission; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_userGroup2Permission", AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs index 049c3fc940a9..38d7a7f3241b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs @@ -6,11 +6,13 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id")] +[PrimaryKey(PrimaryKeyName)] [ExplicitColumns] public class UserGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string KeyColumnName = Constants.DatabaseSchema.PrimaryKeyNameKey; public UserGroupDto() { @@ -20,11 +22,11 @@ public UserGroupDto() UserGroup2GranularPermissionDtos = new List(); } - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(IdentitySeed = 6)] public int Id { get; set; } - [Column("key")] + [Column(KeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [Constraint(Default = SystemMethods.NewGuid)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoUserGroup_userGroupKey")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs index 6b7705e6b53b..9899741bec46 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("sessionId", AutoIncrement = false)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] [ExplicitColumns] internal sealed class UserLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.UserLogin; + public const string PrimaryKeyName = "sessionId"; - [Column("sessionId")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] public Guid SessionId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs index 51ca08b84209..07af9f45003c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs @@ -5,11 +5,12 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] public class UserStartNodeDto : IEquatable { public const string TableName = Constants.DatabaseSchema.Tables.UserStartNode; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; public enum StartNodeTypeValue { @@ -17,7 +18,7 @@ public enum StartNodeTypeValue Media = 2, } - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_userStartNode")] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs index 85d039522280..1d08139aa46b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs @@ -15,9 +15,9 @@ public class Webhook2HeadersDto [ForeignKey(typeof(WebhookDto), OnDelete = Rule.Cascade)] public int WebhookId { get; set; } - [Column("Key")] + [Column("key")] public string Key { get; set; } = string.Empty; - [Column("Value")] + [Column("value")] public string Value { get; set; } = string.Empty; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs index 122a70c28800..6217aafb7713 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs @@ -6,13 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] internal sealed class WebhookDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs index 7c3601601f4f..31b4f0b6b941 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] internal sealed class WebhookLogDto { public const string TableName = Constants.DatabaseSchema.Tables.WebhookLog; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs index 240fab3c1124..e1d018a5e1be 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs @@ -5,13 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey("id", AutoIncrement = true)] +[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] [ExplicitColumns] public class WebhookRequestDto { public const string TableName = Constants.DatabaseSchema.Tables.WebhookRequest; + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - [Column("id")] + [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/NPocoSqlExtensions.cs b/src/Umbraco.Infrastructure/Persistence/NPocoSqlExtensions.cs index 383b091dfb89..90d33b9c7da9 100644 --- a/src/Umbraco.Infrastructure/Persistence/NPocoSqlExtensions.cs +++ b/src/Umbraco.Infrastructure/Persistence/NPocoSqlExtensions.cs @@ -43,6 +43,12 @@ public static Sql WhereClosure(this Sql sql, Exp return sql.Where(predicate, alias).Append(")"); } + public static Sql WhereParam(this Sql sql, Expression> field, string param) + { + string s = $"{sql.GetColumns(columnExpressions: [field], withAlias: false).FirstOrDefault()} = {param}"; + return sql.Where(s, []); + } + /// /// Appends a WHERE clause to the Sql statement. /// @@ -88,6 +94,15 @@ public static Sql Where(this Sql public static Sql WhereIn(this Sql sql, Expression> field, IEnumerable? values) { var fieldName = sql.SqlContext.SqlSyntax.GetFieldName(field); + + Attempt attempt = values.TryConvertTo(); + if (attempt.Success) + { + values = attempt.Result?.Select(v => v?.ToLower()); + sql.Where($"LOWER({fieldName}) IN (@values)", new { values }); + return sql; + } + sql.Where($"{fieldName} IN (@values)", new { values }); return sql; } @@ -788,6 +803,26 @@ public static Sql SelectMax(this Sql sql, Expres return sql.Select($"COALESCE(MAX ({sql.SqlContext.SqlSyntax.GetFieldName(field)}), {coalesceValue})"); } + /// + /// Adds a SQL SELECT statement to retrieve the maximum value of the specified field from the table associated + /// with the specified DTO type. + /// + /// The type of the Data Transfer Object (DTO) that represents the table from which the maximum value will be + /// selected. + /// The SQL query builder to which the SELECT statement will be appended. Cannot be . + /// An expression specifying the field for which the maximum value will be calculated. Cannot be . + /// COALESCE string value. + /// A modified SQL query builder that includes the SELECT statement for the maximum value of the specified + /// field or the coalesceValue. + public static Sql SelectMax(this Sql sql, Expression> field, string coalesceValue) + { + ArgumentNullException.ThrowIfNull(sql); + ArgumentNullException.ThrowIfNull(field); + + return sql.Select($"COALESCE(MAX {sql.SqlContext.SqlSyntax.GetFieldName(field)}), '{coalesceValue}')"); + } + /// /// Adds a SQL SELECT statement to retrieve the sum of the values of the specified field from the table associated /// with the specified DTO type. @@ -1505,7 +1540,7 @@ internal static string GetAliasedField(this Sql sql, string field) public static Sql AppendSubQuery(this Sql sql, Sql subQuery, string alias) { // Append the subquery as a derived table with an alias - sql.Append("(").Append(subQuery.SQL, subQuery.Arguments).Append($") AS {alias}"); + sql.Append("(").Append(subQuery.SQL, subQuery.Arguments).Append($") AS {sql.SqlContext.SqlSyntax.GetQuotedName(alias)}"); return sql; } @@ -1547,6 +1582,13 @@ private static string[] GetColumns(this Sql sql, string? tabl return alias; } + if ((column.MemberInfoKey.InvariantEquals("uniqueid") && !column.MemberInfoKey.Equals("uniqueId")) + || (column.MemberInfoKey.InvariantEquals("languageid") && !column.MemberInfoKey.Equals("languageId"))) + { + return withAlias ? (string.IsNullOrEmpty(column.ColumnAlias) ? column.ColumnName + : column.ColumnAlias) : null; + } + return withAlias ? (string.IsNullOrEmpty(column.ColumnAlias) ? column.MemberInfoKey : column.ColumnAlias) : null; } diff --git a/src/Umbraco.Infrastructure/Persistence/Querying/Query.cs b/src/Umbraco.Infrastructure/Persistence/Querying/Query.cs index c66e121cf736..bb856bae0fba 100644 --- a/src/Umbraco.Infrastructure/Persistence/Querying/Query.cs +++ b/src/Umbraco.Infrastructure/Persistence/Querying/Query.cs @@ -2,7 +2,9 @@ using System.Linq.Expressions; using System.Text; using NPoco; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.Persistence.Querying; +using Umbraco.Extensions; namespace Umbraco.Cms.Infrastructure.Persistence.Querying; @@ -45,10 +47,24 @@ public virtual IQuery WhereIn(Expression>? fieldSelector, IEn var expressionHelper = new ModelToSqlExpressionVisitor(_sqlContext.SqlSyntax, _sqlContext.Mappers); var whereExpression = expressionHelper.Visit(fieldSelector); + + FixCompareCasing(ref values, ref whereExpression); + _wheres.Add(new Tuple(whereExpression + " IN (@values)", new object[] { new { values } })); return this; } + private static void FixCompareCasing(ref IEnumerable? values, ref string whereExpression) + { + Attempt attempt = values.TryConvertTo(); + if (attempt.Success) + { + // fix for case insensitive comparison in databases like PostgreSQL + whereExpression = $"LOWER({whereExpression})"; + values = attempt.Result?.Select(v => v.ToLower()); + } + } + /// /// Adds a where-not-in clause to the query. /// @@ -61,6 +77,9 @@ public virtual IQuery WhereNotIn(Expression>? fieldSelector, var expressionHelper = new ModelToSqlExpressionVisitor(_sqlContext.SqlSyntax, _sqlContext.Mappers); var whereExpression = expressionHelper.Visit(fieldSelector); + + FixCompareCasing(ref values, ref whereExpression); + _wheres.Add(new Tuple(whereExpression + " NOT IN (@values)", new object[] { new { values } })); return this; } @@ -88,7 +107,7 @@ public virtual IQuery WhereAny(IEnumerable>>? predic { sb = new StringBuilder("("); parameters = new List(); - sql = Sql.BuilderFor(_sqlContext); + sql = NPoco.Sql.BuilderFor(_sqlContext); } else { diff --git a/src/Umbraco.Infrastructure/Persistence/Relations/ContentRelationsUpdate.cs b/src/Umbraco.Infrastructure/Persistence/Relations/ContentRelationsUpdate.cs index 871f530a1e4d..b39b04ab3b37 100644 --- a/src/Umbraco.Infrastructure/Persistence/Relations/ContentRelationsUpdate.cs +++ b/src/Umbraco.Infrastructure/Persistence/Relations/ContentRelationsUpdate.cs @@ -162,7 +162,8 @@ private void PersistRelations(IScope scope, IContentBase entity) private sealed class NodeIdKey { - [Column("id")] + public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + [Column(PrimaryKeyName)] public int NodeId { get; set; } [Column("uniqueId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/AuditRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/AuditRepository.cs index 9b1d6a9f396b..fb2943c81d6a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/AuditRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/AuditRepository.cs @@ -31,8 +31,9 @@ public AuditRepository( public IEnumerable Get(AuditType type, IQuery query) { + var logHeader = type.ToString(); // get the string representation of the enum first, because it does not work in the lambda expression of .Where Sql? sqlClause = GetBaseQuery(false) - .Where("(logHeader=@0)", type.ToString()); + .Where(e => e.Header == logHeader); var translator = new SqlTranslator(sqlClause, query); Sql sql = translator.Translate(); diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs index 28778c401af7..d196be43ac65 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs @@ -545,10 +545,10 @@ private string ApplyCustomOrdering(ref Sql sql, Ordering ordering) { // sorting by a custom field, so set-up sub-query for ORDER BY clause to pull through value // from 'current' content version for the given order by field - var sortedInt = string.Format(SqlContext.SqlSyntax.ConvertIntegerToOrderableString, "intValue"); - var sortedDecimal = string.Format(SqlContext.SqlSyntax.ConvertDecimalToOrderableString, "decimalValue"); - var sortedDate = string.Format(SqlContext.SqlSyntax.ConvertDateToOrderableString, "dateValue"); - var sortedString = "COALESCE(varcharValue,'')"; // assuming COALESCE is ok for all syntaxes + var sortedInt = string.Format(SqlContext.SqlSyntax.ConvertIntegerToOrderableString, QuoteColumnName("intValue")); + var sortedDecimal = string.Format(SqlContext.SqlSyntax.ConvertDecimalToOrderableString, QuoteColumnName("decimalValue")); + var sortedDate = string.Format(SqlContext.SqlSyntax.ConvertDateToOrderableString, QuoteColumnName("dateValue")); + var sortedString = $"COALESCE({QuoteColumnName("varcharValue")},'')"; // assuming COALESCE is ok for all syntaxes // needs to be an outer join since there's no guarantee that any of the nodes have values for this property Sql innerSql = Sql().Select($@"CASE diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs index dc5e0c02f97d..b8a22cdb4031 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs @@ -205,10 +205,10 @@ protected override Sql GetBaseQuery(bool isCount) protected override IEnumerable GetDeleteClauses() { var l = (List)base.GetDeleteClauses(); // we know it's a list - l.Add($"DELETE FROM {QuoteTableName(ContentVersionCleanupPolicyDto.TableName)} WHERE {QuoteColumnName("contentTypeId")} = @id"); - l.Add($"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.DocumentType)} WHERE {QuoteColumnName("contentTypeNodeId")} = @id"); - l.Add($"DELETE FROM {QuoteTableName(ContentTypeDto.TableName)} WHERE {QuoteColumnName("nodeId")} = @id"); - l.Add($"DELETE FROM {QuoteTableName(NodeDto.TableName)} WHERE id = @id"); + l.Add($"DELETE FROM {QuoteTableName(ContentVersionCleanupPolicyDto.TableName)} WHERE {QuoteColumnName(ContentVersionCleanupPolicyDto.PrimaryKeyName)} = @id"); + l.Add($"DELETE FROM {QuoteTableName(ContentTypeTemplateDto.TableName)} WHERE {QuoteColumnName(ContentTypeTemplateDto.PrimaryKeyName)} = @id"); + l.Add($"DELETE FROM {QuoteTableName(ContentTypeDto.TableName)} WHERE {QuoteColumnName(ContentTypeDto.NodeIdName)} = @id"); + l.Add($"DELETE FROM {QuoteTableName(NodeDto.TableName)} WHERE {QuoteColumnName(NodeDto.PrimaryKeyName)} = @id"); return l; } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs index b2b40c2f8435..612738dd3db7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs @@ -1078,10 +1078,10 @@ private void CopyTagData( // select tags to insert: tags pointed to by a relation ship, for proper property/content types, // and of source language, and where we cannot left join to an existing tag with same text, // group and languageId - var targetLanguageIdS = targetLanguageId.HasValue ? targetLanguageId.ToString() : "NULL"; + var targetLanguageIdS = targetLanguageId.HasValue ? targetLanguageId.ToString() : "NULL" + SqlSyntax.GetNullExtension(); Sql sqlSelectTagsToInsert1 = Sql() .SelectDistinct(x => x.Text, x => x.Group) - .Append(", " + targetLanguageIdS) + .Append($", {targetLanguageIdS} ") .From(); sqlSelectTagsToInsert1 @@ -1234,7 +1234,7 @@ private void CopyPropertyData( Database.Execute(sqlDelete); // now insert all property data into the target language that exists under the source language - var targetLanguageIdS = targetLanguageId.HasValue ? targetLanguageId.ToString() : "NULL"; + var targetLanguageIdS = targetLanguageId.HasValue ? targetLanguageId.ToString() : "NULL" + SqlSyntax.GetNullExtension(); var cols = Sql().ColumnsForInsert( x => x.VersionId, x => x.PropertyTypeId, @@ -1658,7 +1658,7 @@ public bool HasContainerInPath(params int[] ids) public bool HasContentNodes(int id) { var sql = new Sql( - $"SELECT CASE WHEN EXISTS (SELECT * FROM {QuoteTableName(ContentDto.TableName)} WHERE {QuoteColumnName("contentTypeId")} = @id) THEN 1 ELSE 0 END", + $"SELECT CASE WHEN EXISTS (SELECT * FROM {QuoteTableName(ContentDto.TableName)} WHERE {QuoteColumnName(ContentDto.ContentTypeIdName)} = @id) THEN 1 ELSE 0 END", new { id }); return Database.ExecuteScalar(sql) == 1; } @@ -1670,18 +1670,18 @@ protected override IEnumerable GetDeleteClauses() // is included here just to be 100% sure since it has a FK on cmsPropertyType. var list = new List { - $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.User2NodeNotify)} WHERE {QuoteColumnName("nodeId")} = @id", - $@"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.UserGroup2GranularPermission)} WHERE {QuoteColumnName("uniqueId")} IN - (SELECT {QuoteColumnName("uniqueId")} FROM {QuoteTableName(NodeDto.TableName)} WHERE id = @id)", - $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.TagRelationship)} WHERE {QuoteColumnName("nodeId")} = @id", - $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.ContentChildType)} WHERE {QuoteColumnName("Id")} = @id", - $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.ContentChildType)} WHERE {QuoteColumnName("AllowedId")} = @id", - $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.ContentTypeTree)} WHERE {QuoteColumnName("parentContentTypeId")} = @id", - $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.ContentTypeTree)} WHERE {QuoteColumnName("childContentTypeId")} = @id", - $@"DELETE FROM {QuoteTableName(PropertyDataDto.TableName)} WHERE {QuoteColumnName("propertyTypeId")} IN - (SELECT id FROM {QuoteTableName(Constants.DatabaseSchema.Tables.PropertyType)} WHERE {QuoteColumnName("contentTypeId")} = @id)", - $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.PropertyType)} WHERE {QuoteColumnName("contentTypeId")} = @id", - $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.PropertyTypeGroup)} WHERE {QuoteColumnName("contenttypeNodeId")} = @id", + $"DELETE FROM {QuoteTableName(User2NodeNotifyDto.TableName)} WHERE {QuoteColumnName(User2NodeNotifyDto.NodeIdColumnName)} = @id", + $@"DELETE FROM {QuoteTableName(UserGroup2GranularPermissionDto.TableName)} WHERE {QuoteColumnName(UserGroup2GranularPermissionDto.UniqueIdName)} IN + (SELECT {QuoteColumnName("uniqueId")} FROM {QuoteTableName(NodeDto.TableName)} WHERE {QuoteColumnName(NodeDto.PrimaryKeyName)} = @id)", + $"DELETE FROM {QuoteTableName(TagRelationshipDto.TableName)} WHERE {QuoteColumnName(TagRelationshipDto.PrimaryKeyName)} = @id", + $"DELETE FROM {QuoteTableName(ContentTypeAllowedContentTypeDto.TableName)} WHERE {QuoteColumnName(ContentTypeAllowedContentTypeDto.PrimaryKeyName)} = @id", + $"DELETE FROM {QuoteTableName(ContentTypeAllowedContentTypeDto.TableName)} WHERE {QuoteColumnName(ContentTypeAllowedContentTypeDto.AllowedIdName)} = @id", + $"DELETE FROM {QuoteTableName(ContentType2ContentTypeDto.TableName)} WHERE {QuoteColumnName(ContentType2ContentTypeDto.PrimaryKeyName)} = @id", + $"DELETE FROM {QuoteTableName(ContentType2ContentTypeDto.TableName)} WHERE {QuoteColumnName(ContentType2ContentTypeDto.ChildIdName)} = @id", + $@"DELETE FROM {QuoteTableName(PropertyDataDto.TableName)} WHERE {QuoteColumnName(PropertyDataDto.PropertyTypeIdName)} IN + (SELECT id FROM {QuoteTableName(PropertyTypeDto.TableName)} WHERE {QuoteColumnName(PropertyTypeDto.ContentTypeIdName)} = @id)", + $"DELETE FROM {QuoteTableName(PropertyTypeDto.TableName)} WHERE {QuoteColumnName(PropertyTypeDto.ContentTypeIdName)} = @id", + $"DELETE FROM {QuoteTableName(PropertyTypeGroupDto.TableName)} WHERE {QuoteColumnName(PropertyTypeGroupDto.ContentTypeNodeIdName)} = @id", }; return list; } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DomainRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DomainRepository.cs index 856e643c8acd..53fa738245e4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DomainRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DomainRepository.cs @@ -136,7 +136,7 @@ protected override void PersistNewItem(IDomain entity) // If the language changed, we need to resolve the ISO code if (entity.LanguageId.HasValue) { - ((UmbracoDomain)entity).LanguageIsoCode = Database.ExecuteScalar( + ((UmbracoDomain)entity).LanguageIsoCode = Database.FirstOrDefault( $"SELECT {QuoteColumnName("languageISOCode")} FROM {QuoteTableName(Constants.DatabaseSchema.Tables.Language)} WHERE id = @langId", new { langId = entity.LanguageId }); } @@ -186,7 +186,7 @@ protected override void PersistUpdatedItem(IDomain entity) // If the language changed, we need to resolve the ISO code if (entity.WasPropertyDirty("LanguageId")) { - ((UmbracoDomain)entity).LanguageIsoCode = Database.ExecuteScalar( + ((UmbracoDomain)entity).LanguageIsoCode = Database.FirstOrDefault( $"SELECT {QuoteColumnName("languageISOCode")} FROM {QuoteTableName(Constants.DatabaseSchema.Tables.Language)} WHERE id = @langId", new { langId = entity.LanguageId }); } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/EntityRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/EntityRepository.cs index 3caaea2ab88e..a0a52b0b8c81 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/EntityRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/EntityRepository.cs @@ -294,12 +294,15 @@ private Sql SiblingsSql( // the final query for before and after positions will increase. So we need to calculate the offset based on the provided values. int beforeAfterParameterIndexOffset = GetBeforeAfterParameterOffset(objectTypes, filter); + // use all lower case alias names to avoid sql syntax issues + string targetAlias = "target"; + // Find the specific row number of the target node. // We need this to determine the bounds of the row numbers to select. Sql targetRowSql = Sql() .Select("rn") - .From().AppendSubQuery(rowNumberSql, "Target") - .Where(x => x.UniqueId == targetKey, "Target"); + .From().AppendSubQuery(rowNumberSql, targetAlias) + .Where(x => x.UniqueId == targetKey, targetAlias); // We have to reuse the target row sql arguments, however, we also need to add the "before" and "after" values to the arguments. // If we try to do this directly in the params array it'll consider the initial argument array as a single argument. @@ -316,8 +319,8 @@ private Sql SiblingsSql( totalAfter = GetNumberOfSiblingsOutsideSiblingRange(rowNumberSql, targetRowSql, beforeAfterParameterIndex, afterArgumentsArray, false); return Sql() - .Select("UniqueId") - .From().AppendSubQuery(rowNumberSql, "NumberedNodes") + .Select(SqlSyntax.GetQuotedColumnName("uniqueId")) + .From().AppendSubQuery(rowNumberSql, "nn") .Where($"rn >= ({targetRowSql.SQL}) - @{beforeAfterParameterIndex}", beforeArgumentsArray) .Where($"rn <= ({targetRowSql.SQL}) + @{beforeAfterParameterIndex}", afterArgumentsArray) .OrderBy("rn"); @@ -355,9 +358,9 @@ private long GetNumberOfSiblingsOutsideSiblingRange( { Sql? sql = Sql() .SelectCount() - .From().AppendSubQuery(rowNumberSql, "NumberedNodes") + .From().AppendSubQuery(rowNumberSql, "nn") .Where($"rn {(getBefore ? "<" : ">")} ({targetRowSql.SQL}) {(getBefore ? "-" : "+")} @{parameterIndex}", arguments); - return Database.ExecuteScalar(sql); + return Database.FirstOrDefault(sql); } @@ -495,14 +498,14 @@ public UmbracoObjectTypes GetObjectType(int id) { Sql sql = Sql().Select(x => x.NodeObjectType).From() .Where(x => x.NodeId == id); - return ObjectTypes.GetUmbracoObjectType(Database.ExecuteScalar(sql)); + return ObjectTypes.GetUmbracoObjectType(Database.First(sql)); } public UmbracoObjectTypes GetObjectType(Guid key) { Sql sql = Sql().Select(x => x.NodeObjectType).From() .Where(x => x.UniqueId == key); - return ObjectTypes.GetUmbracoObjectType(Database.ExecuteScalar(sql)); + return ObjectTypes.GetUmbracoObjectType(Database.First(sql)); } public int ReserveId(Guid key) @@ -969,11 +972,13 @@ private void ApplyOrdering(ref Sql sql, Ordering ordering) orderBy = SqlSyntax.GetQuotedColumn(NodeDto.TableName, "path"); break; case "NODEID": - orderBy = runner.OrderBy; + orderBy = SqlSyntax.GetQuotedColumn(NodeDto.TableName, "id"); orderingIncludesNodeId = true; break; default: - orderBy = QuoteColumnName(runner.OrderBy) ?? string.Empty; + orderBy = runner.OrderBy != null + ? SqlSyntax.GetQuotedColumn(NodeDto.TableName, runner.OrderBy) + : string.Empty; break; } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/IdKeyMapRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/IdKeyMapRepository.cs index d3b5f898ed39..a747cf17c939 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/IdKeyMapRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/IdKeyMapRepository.cs @@ -85,7 +85,7 @@ public class IdKeyMapRepository(IScopeAccessor scopeAccessor) : IIdKeyMapReposit .Select(c => c.UniqueId) .From() .Where(n => n.NodeId == id); - return database?.ExecuteScalar(sql); + return database?.FirstOrDefault(sql); } Guid type = GetNodeObjectTypeGuid(umbracoObjectType); @@ -96,7 +96,7 @@ public class IdKeyMapRepository(IScopeAccessor scopeAccessor) : IIdKeyMapReposit n.NodeId == id && (n.NodeObjectType == type || n.NodeObjectType == Constants.ObjectTypes.IdReservation)); - return database?.ExecuteScalar(sql); + return database?.FirstOrDefault(sql); } private Guid GetNodeObjectTypeGuid(UmbracoObjectTypes umbracoObjectType) diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LanguageRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LanguageRepository.cs index 0718dbe1bf08..6db2be83171b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LanguageRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LanguageRepository.cs @@ -188,7 +188,7 @@ private ILanguage GetDefault() #region Overrides of RepositoryBase - protected override ILanguage? PerformGet(int id) => PerformGetAll(id).FirstOrDefault(); + protected override ILanguage? PerformGet(int id) => PerformGetAll([id]).FirstOrDefault(); protected override IEnumerable PerformGetAll(params int[]? ids) { @@ -260,14 +260,14 @@ protected override IEnumerable GetDeleteClauses() { // NOTE: There is no constraint between the Language and cmsDictionary/cmsLanguageText tables (?) // but we still need to remove them - $"DELETE FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.DictionaryValue)} {lIdWhere}", - $"DELETE FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.PropertyData)} {lIdWhere}", - $"DELETE FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.ContentVersionCultureVariation)} {lIdWhere}", - $"DELETE FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.DocumentCultureVariation)} {lIdWhere}", - $"DELETE FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.TagRelationship)} WHERE {QuoteColumnName("tagId")} IN (SELECT id FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.Tag)} {lIdWhere})", - $"DELETE FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.Tag)} {lIdWhere}", - $"DELETE FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.DocumentUrl)} {lIdWhere}", - $"DELETE FROM {SqlSyntax.GetQuotedName(Constants.DatabaseSchema.Tables.Language)} WHERE id = @id", + $"DELETE FROM {QuoteName(Constants.DatabaseSchema.Tables.DictionaryValue)} {lIdWhere}", + $"DELETE FROM {QuoteName(Constants.DatabaseSchema.Tables.PropertyData)} {lIdWhere}", + $"DELETE FROM {QuoteName(Constants.DatabaseSchema.Tables.ContentVersionCultureVariation)} {lIdWhere}", + $"DELETE FROM {QuoteName(Constants.DatabaseSchema.Tables.DocumentCultureVariation)} {lIdWhere}", + $"DELETE FROM {QuoteName(Constants.DatabaseSchema.Tables.TagRelationship)} WHERE {QuoteColumnName("tagId")} IN (SELECT id FROM {QuoteName(Constants.DatabaseSchema.Tables.Tag)} {lIdWhere})", + $"DELETE FROM {QuoteName(Constants.DatabaseSchema.Tables.Tag)} {lIdWhere}", + $"DELETE FROM {QuoteName(Constants.DatabaseSchema.Tables.DocumentUrl)} {lIdWhere}", + $"DELETE FROM {QuoteName(Constants.DatabaseSchema.Tables.Language)} WHERE id = @id", }; return list; } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LastSyncedRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LastSyncedRepository.cs index 4458c04e2b4f..dc7f92f78a3d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LastSyncedRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LastSyncedRepository.cs @@ -1,4 +1,4 @@ -using NPoco; +using NPoco; using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.Factories; using Umbraco.Cms.Core.Persistence.Repositories; @@ -58,7 +58,7 @@ public async Task SaveInternalIdAsync(int id) await Database.InsertOrUpdateAsync( dto, - "SET lastSyncedInternalId=@LastSyncedInternalId, lastSyncedDate=@LastSyncedDate WHERE machineId=@MachineId", + $"SET {QuoteColumnName("lastSyncedInternalId")}=@LastSyncedInternalId, {QuoteColumnName("lastSyncedDate")}=@LastSyncedDate WHERE {QuoteColumnName("machineId")}=@MachineId", new { dto.LastSyncedInternalId, @@ -79,7 +79,7 @@ public async Task SaveExternalIdAsync(int id) await Database.InsertOrUpdateAsync( dto, - "SET lastSyncedExternalId=@LastSyncedExternalId, lastSyncedDate=@LastSyncedDate WHERE machineId=@MachineId", + $"SET {QuoteColumnName("lastSyncedExternalId")}=@LastSyncedExternalId, {QuoteColumnName("lastSyncedDate")}=@LastSyncedDate WHERE {QuoteColumnName("machineId")}=@MachineId", new { dto.LastSyncedExternalId, @@ -91,11 +91,11 @@ await Database.InsertOrUpdateAsync( /// public async Task DeleteEntriesOlderThanAsync(DateTime pruneDate) { - var maxId = Database.ExecuteScalar($"SELECT MAX(Id) FROM umbracoCacheInstruction;"); + var maxId = Database.ExecuteScalar($"SELECT MAX(Id) FROM {QuoteTableName("umbracoCacheInstruction")};"); Sql sql = new Sql().Append( - @"DELETE FROM umbracoLastSynced WHERE lastSyncedDate < @pruneDate OR lastSyncedInternalId > @maxId AND lastSyncedExternalId > @maxId;", + @$"DELETE FROM {QuoteTableName("umbracoLastSynced")} WHERE {QuoteColumnName("lastSyncedDate")} < @pruneDate OR {QuoteColumnName("lastSyncedInternalId")} > @maxId AND {QuoteColumnName("lastSyncedExternalId")} > @maxId;", new { pruneDate, maxId }); await Database.ExecuteAsync(sql); diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaRepository.cs index b15dfd0fa782..39f69afa1afd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaRepository.cs @@ -362,7 +362,7 @@ protected override IEnumerable GetDeleteClauses() $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.Document)} WHERE {nodeId} = @id", $@"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.MediaVersion)} WHERE id IN (SELECT id FROM {QuoteTableName(Constants.DatabaseSchema.Tables.ContentVersion)} WHERE {nodeId} = @id)", - $@"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.PropertyData)} WHERE versionId IN + $@"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.PropertyData)} WHERE {QuoteColumnName("versionId")} IN (SELECT id FROM {QuoteTableName(Constants.DatabaseSchema.Tables.ContentVersion)} WHERE {nodeId} = @id)", $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.ContentVersion)} WHERE {nodeId} = @id", $"DELETE FROM {QuoteTableName(Constants.DatabaseSchema.Tables.Content)} WHERE {nodeId} = @id", diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberRepository.cs index 58f1ae4bc6d3..3e7a880deec5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberRepository.cs @@ -224,13 +224,15 @@ public IEnumerable GetByMemberGroup(string groupName) return Enumerable.Empty(); } - Sql subQuery = Sql().Select("Member").From() + Sql subQuery = Sql() + .Select(c => c.Member) + .From() .Where(dto => dto.MemberGroup == memberGroup.Id); Sql sql = GetBaseQuery(false) // TODO: An inner join would be better, though I've read that the query optimizer will always turn a // subquery with an IN clause into an inner join anyways. - .Append("WHERE umbracoNode.id IN (" + subQuery.SQL + ")", subQuery.Arguments) + .Append($"WHERE {QuoteTableName("umbracoNode")}.id IN (" + subQuery.SQL + ")", subQuery.Arguments) .OrderByDescending(x => x.VersionDate) .OrderBy(x => x.SortOrder); @@ -255,7 +257,7 @@ public int GetCountByQuery(IQuery? query) //get the COUNT base query Sql fullSql = GetBaseQuery(true) - .Append(new Sql("WHERE umbracoNode.id IN (" + sql.SQL + ")", sql.Arguments)); + .Append(new Sql($"WHERE {QuoteTableName("umbracoNode")}.id IN ({sql.SQL})", sql.Arguments)); return Database.ExecuteScalar(fullSql); } @@ -318,7 +320,7 @@ public async Task> GetPagedByFilterAsync(MemberFilter member } var pageIndex = skip / take; - Page? pageResult = await Database.PageAsync(pageIndex+1, take, sql); + Page? pageResult = await Database.PageAsync(pageIndex + 1, take, sql); // shortcut so our join is not too big, but we also hope these are cached, so we don't have to map them again. var nodeIds = pageResult.Items.Select(x => x.NodeId).ToArray(); @@ -394,16 +396,12 @@ public int[] GetMemberIds(string[] usernames) Guid memberObjectType = Constants.ObjectTypes.Member; Sql memberSql = Sql() - .Select("umbracoNode.id") + .Select(n => n.NodeId) .From() .InnerJoin() .On(dto => dto.NodeId, dto => dto.NodeId) .Where(x => x.NodeObjectType == memberObjectType) - .Where("cmsMember.LoginName in (@usernames)", new - { - /*usernames =*/ - usernames - }); + .WhereIn(m => m.LoginName, usernames); return Database.Fetch(memberSql).ToArray(); } @@ -538,7 +536,7 @@ private IMember MapDtoToContent(MemberDto dto) var versionId = dto.ContentVersionDto.Id; var temp = new TempContent(dto.ContentDto.NodeId, versionId, 0, memberType); IDictionary properties = - GetPropertyCollections(new List> {temp}); + GetPropertyCollections(new List> { temp }); member.Properties = properties[versionId]; // reset dirty initial properties (U4-1946) @@ -601,7 +599,7 @@ protected override IEnumerable PerformGetByQuery(IQuery query) var translator = new SqlTranslator(sqlWithProps, query); Sql sql = translator.Translate(); - baseQuery.Append("WHERE umbracoNode.id IN (" + sql.SQL + ")", sql.Arguments) + baseQuery.Append($"WHERE {QuoteTableName("umbracoNode")}.id IN (" + sql.SQL + ")", sql.Arguments) .OrderBy(x => x.SortOrder); return MapDtosToContent(Database.Fetch(baseQuery)); @@ -751,8 +749,11 @@ public override IEnumerable GetAllVersions(int nodeId) protected override void PerformDeleteVersion(int id, int versionId) { - Database.Delete("WHERE versionId = @VersionId", new {versionId}); - Database.Delete("WHERE versionId = @VersionId", new {versionId}); + Sql sql = Sql().Delete(x => x.VersionId == versionId); + Database.Execute(sql); + + sql = Sql().Delete(x => x.Id == versionId); + Database.Execute(sql); } #endregion diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberTypeRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberTypeRepository.cs index 9a1ff64f424a..6a14868ae58f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberTypeRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberTypeRepository.cs @@ -144,8 +144,8 @@ private Sql GetSubquery() protected override IEnumerable GetDeleteClauses() { var l = (List)base.GetDeleteClauses(); // we know it's a list - l.Add($"DELETE FROM {QuoteTableName("cmsMemberType")} WHERE NodeId = @id"); - l.Add($"DELETE FROM {QuoteTableName("cmsContentType")} WHERE nodeId = @id"); + l.Add($"DELETE FROM {QuoteTableName(MemberPropertyTypeDto.TableName)} WHERE {QuoteColumnName(MemberPropertyTypeDto.NodeIdName)} = @id"); + l.Add($"DELETE FROM {QuoteTableName(ContentTypeDto.TableName)} WHERE {QuoteColumnName(ContentTypeDto.NodeIdName)} = @id"); l.Add($"DELETE FROM {QuoteTableName("umbracoNode")} WHERE id = @id"); return l; } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/NotificationsRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/NotificationsRepository.cs index ba6345c24696..8f169bf25d23 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/NotificationsRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/NotificationsRepository.cs @@ -171,7 +171,7 @@ public bool TryCreateNotification(IUser user, IEntity entity, string action, [No .SelectDistinct(c => c.NodeObjectType) .From() .Where(nodeDto => nodeDto.NodeId == entity.Id); - Guid nodeType = AmbientScope.Database.ExecuteScalar(sql); + Guid nodeType = AmbientScope.Database.FirstOrDefault(sql); var dto = new User2NodeNotifyDto { Action = action, NodeId = entity.Id, UserId = user.Id }; AmbientScope.Database.Insert(dto); diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RedirectUrlRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RedirectUrlRepository.cs index 985e0ac63691..1bba381b8c0b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RedirectUrlRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RedirectUrlRepository.cs @@ -159,12 +159,11 @@ public IEnumerable GetAllUrls(int rootContentId, long pageIndex, i public IEnumerable SearchUrls(string searchTerm, long pageIndex, int pageSize, out long total) { Sql sql = GetBaseQuery(false) - .Where( - string.Format( - "{0}.{1} LIKE @url", - QuoteTableName("umbracoRedirectUrl"), - QuoteColumnName("Url")), - new { url = "%" + searchTerm.Trim().ToLowerInvariant() + "%" }) + .WhereLike(x => x.Url, "%" + searchTerm.Trim().ToLowerInvariant() + "%") + //.Where( + // string.Format("{0}.{1} LIKE @url", QuoteTableName("umbracoRedirectUrl"), + // QuoteColumnName("url")), + // new { url = "%" + searchTerm.Trim().ToLowerInvariant() + "%" }) .OrderByDescending(x => x.CreateDateUtc); Page result = Database.Page(pageIndex + 1, pageSize, sql); total = Convert.ToInt32(result.TotalItems); diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RepositoryBase.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RepositoryBase.cs index ee20a8cccfb3..9f2715dc9289 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RepositoryBase.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RepositoryBase.cs @@ -88,4 +88,18 @@ protected IScope AmbientScope /// Quotes a column name according to the registered SQL syntax provider. /// protected string QuoteColumnName(string? columnName) => SqlSyntax.GetQuotedColumnName(columnName); + + /// + /// Returns the column name, qualified by the specified table name, with appropriate quoting for use in SQL + /// statements. + /// + /// The name of the table to qualify the column with. Cannot be null or empty. + /// The name of the column to quote. Cannot be null or empty. + /// A string containing the quoted and qualified column name suitable for use in SQL queries. + protected string QuoteColumnName(string tableName, string columnName) => SqlSyntax.GetQuotedColumn(tableName, columnName); + + /// + /// Quotes a column name according to the registered SQL syntax provider. + /// + protected string QuoteName(string? name) => SqlSyntax.GetQuotedName(name); } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs index d78502630780..635b7593716f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs @@ -152,7 +152,7 @@ public void Assign(int contentId, int propertyTypeId, IEnumerable tags, bo FROM {tagSetSql} LEFT OUTER JOIN {cmsTags} ON (LOWER(tagset.tag) = LOWER({cmsTags}.tag) AND LOWER(tagset.{group}) = LOWER({cmsTags}.{group}) AND COALESCE(tagset.languageid, -1) = COALESCE({cmsTagsLanguageIdCol}, -1)) -WHERE {cmsTags}.id IS NULL"; // cmsTags.id is never null +WHERE {cmsTags}.id IS NULL"; Database.Execute(sql1); @@ -160,13 +160,13 @@ LEFT OUTER JOIN {cmsTags} var sql2 = $@"INSERT INTO {QuoteTableName(TagRelationshipDto.TableName)} ({nodeId}, {QuoteColumnName("propertyTypeId")}, {QuoteColumnName("tagId")}) SELECT {contentId}, {propertyTypeId}, tagset2.Id FROM ( - SELECT t.{QuoteColumnName("Id")} + SELECT t.id FROM {tagSetSql} INNER JOIN {cmsTags} as t ON (LOWER(tagset.tag) = LOWER(t.tag) AND LOWER(tagset.{group}) = LOWER(t.{group}) AND COALESCE(tagset.languageid, -1) = COALESCE(t.{languageIdCol}, -1)) ) AS tagset2 LEFT OUTER JOIN {QuoteTableName(TagRelationshipDto.TableName)} r -ON (tagset2.id = r.{QuoteColumnName("tagId")} AND r.{nodeId} = {contentId} AND r.{QuoteColumnName("propertyTypeID")} = {propertyTypeId}) -WHERE r.{QuoteColumnName("tagId")} IS NULL"; // cmsTagRelationship.tagId is never null +ON (tagset2.id = r.{QuoteColumnName("tagId")} AND r.{nodeId} = {contentId} AND r.{QuoteColumnName("propertyTypeId")} = {propertyTypeId}) +WHERE r.{QuoteColumnName("tagId")} IS NULL"; Database.Execute(sql2); } @@ -256,7 +256,7 @@ private string GetTagSet(IEnumerable tags) } else { - sql.Append("NULL"); + sql.Append("NULL" + SqlSyntax.GetNullExtension()); } sql.Append(" AS languageid"); } @@ -452,7 +452,8 @@ public IEnumerable GetTagsForEntityType( } sql = sql - .GroupBy(x => x.Id, x => x.Text, x => x.Group, x => x.LanguageId); + .GroupBy(x => x.Id, x => x.Text, x => x.Group, x => x.LanguageId) + .OrderBy(o => o.Text); return ExecuteTagsQuery(sql); } @@ -473,6 +474,9 @@ public IEnumerable GetTagsForEntity(int contentId, string? group = null, s .Where(dto => dto.Group == group); } + sql = sql + .OrderBy(o => o.Text); + return ExecuteTagsQuery(sql); } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs index a5d22870cf63..60f7672d38a8 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs @@ -68,7 +68,7 @@ private IEnumerable GetPagedRelations( return []; } - ISqlSyntaxProvider? sx = _scopeAccessor.AmbientScope.Database.SqlContext.SqlSyntax; + ISqlSyntaxProvider sx = _scopeAccessor.AmbientScope.Database.SqlContext.SqlSyntax; string[] columns = [ sx.ColumnWithAlias("x", "otherId", "nodeId"), sx.ColumnWithAlias("n", "uniqueId", "nodeKey"), @@ -447,7 +447,9 @@ private Sql GetInnerUnionSql() private sealed class UnionHelperDto { - [Column("id")] public int Id { get; set; } + public const string PrimaryKeyName = Core.Constants.DatabaseSchema.PrimaryKeyNameId; + + [Column(PrimaryKeyName)] public int Id { get; set; } [Column("otherId")] public int OtherId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserGroupRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserGroupRepository.cs index 2a5e31d50f2c..292ba3bfd4e2 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserGroupRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserGroupRepository.cs @@ -492,7 +492,7 @@ protected override IEnumerable GetDeleteClauses() { var userGroupId = QuoteColumnName("userGroupId"); var userGroupKey = QuoteColumnName("userGroupKey"); - var key = QuoteColumnName("Key"); + var key = QuoteColumnName(UserGroupDto.KeyColumnName); var umbracoUserGroup = QuoteTableName(UserGroupDto.TableName); var list = new List { diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs index 1de89e8a09fe..6fcad8f26122 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs @@ -1172,15 +1172,21 @@ public IEnumerable GetPagedResultsByQuery( if (userState != null && userState.Length > 0) { - //the "ALL" state doesn't require any filtering so we ignore that, if it exists in the list we don't do any filtering + // the "ALL" state doesn't require any filtering so we ignore that, if it exists in the list we don't do any filtering if (userState.Contains(UserState.All) == false) { var sb = new StringBuilder("("); var appended = false; + var userDisabled = QuoteColumnName("userDisabled"); + var userNoConsole = QuoteColumnName("userNoConsole"); + var lastLoginDate = QuoteColumnName("lastLoginDate"); + var invitedDate = QuoteColumnName("invitedDate"); + var falseValue = SqlSyntax.ConvertIntegerToBoolean(0); + var trueValue = SqlSyntax.ConvertIntegerToBoolean(1); if (userState.Contains(UserState.Active)) { - sb.Append("(userDisabled = 0 AND userNoConsole = 0 AND lastLoginDate IS NOT NULL)"); + sb.Append($"({userDisabled} = {falseValue} AND {userNoConsole} = {falseValue} AND {lastLoginDate} IS NOT NULL)"); appended = true; } @@ -1191,7 +1197,7 @@ public IEnumerable GetPagedResultsByQuery( sb.Append(" OR "); } - sb.Append("(userDisabled = 0 AND userNoConsole = 0 AND lastLoginDate IS NULL)"); + sb.Append($"({userDisabled} = {falseValue} AND {userNoConsole} = {falseValue} AND {lastLoginDate} IS NULL)"); appended = true; } @@ -1202,7 +1208,7 @@ public IEnumerable GetPagedResultsByQuery( sb.Append(" OR "); } - sb.Append("(userDisabled = 1)"); + sb.Append($"({userDisabled} = {trueValue})"); appended = true; } @@ -1213,7 +1219,7 @@ public IEnumerable GetPagedResultsByQuery( sb.Append(" OR "); } - sb.Append("(userNoConsole = 1)"); + sb.Append($"({userNoConsole} = {trueValue})"); appended = true; } @@ -1224,7 +1230,7 @@ public IEnumerable GetPagedResultsByQuery( sb.Append(" OR "); } - sb.Append("(lastLoginDate IS NULL AND userDisabled = 1 AND invitedDate IS NOT NULL)"); + sb.Append($"({lastLoginDate} IS NULL AND {userDisabled} = {trueValue} AND {invitedDate} IS NOT NULL)"); appended = true; } @@ -1264,10 +1270,10 @@ private string GetSuQueryInExclude(string inOrNotIn) return @$"AND ({userIdQuoted} {inOrNotIn} (SELECT DISTINCT {userIdQuoted} FROM {QuoteTableName("umbracoUser")} INNER JOIN {QuoteTableName("umbracoUser2UserGroup")} - ON {SqlSyntax.GetQuotedColumn("umbracoUser2UserGroup", "userId")} = {userIdQuoted} + ON {QuoteColumnName("umbracoUser2UserGroup", "userId")} = {userIdQuoted} INNER JOIN {QuoteTableName("umbracoUserGroup")} - ON {SqlSyntax.GetQuotedColumn("umbracoUserGroup", "id")} = {SqlSyntax.GetQuotedColumn("umbracoUser2UserGroup", "userGroupId")} - WHERE {SqlSyntax.GetQuotedColumn("umbracoUserGroup", "userGroupAlias")} IN (@userGroups)))"; + ON {QuoteColumnName("umbracoUserGroup", "id")} = {QuoteColumnName("umbracoUser2UserGroup", "userGroupId")} + WHERE {QuoteColumnName("umbracoUserGroup", "userGroupAlias")} IN (@userGroups)))"; } public IEnumerable GetAllClientIds() diff --git a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/ISqlSyntaxProvider.cs b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/ISqlSyntaxProvider.cs index a27c666d5375..9c0234b13743 100644 --- a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/ISqlSyntaxProvider.cs +++ b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/ISqlSyntaxProvider.cs @@ -1,4 +1,5 @@ using System.Data; +using System.Data.SqlTypes; using System.Diagnostics.CodeAnalysis; using System.Linq.Expressions; using System.Text.RegularExpressions; @@ -115,6 +116,17 @@ DatabaseType GetUpdatedDatabaseType(DatabaseType current, string? connectionStri string GetQuotedName(string? name); + /// + /// Gets the file extension associated with a null value for the specified type parameter. + /// + /// This method is useful when generating SQL queries that require explicit type casting of NULL + /// values, such as in PostgreSQL. The returned string can be used directly in SQL statements for type-safe + /// comparisons or assignments. + /// The type for which to retrieve the null value file extension. + /// A string containing the file extension that represents a null value for type T, or an empty string if no + /// extension is defined. + string GetNullExtension(); + bool DoesTableExist(IDatabase db, string tableName); string GetIndexType(IndexTypes indexTypes); @@ -157,6 +169,28 @@ DatabaseType GetUpdatedDatabaseType(DatabaseType current, string? connectionStri bool SupportsIdentityInsert(); + /// + /// Determines whether the current database provider supports sequence objects for generating numeric values like PostgreSQL. + /// + /// true if the provider supports sequences; otherwise, false. + bool SupportsSequences(); + + /// + /// Alters the database sequences to match the current schema requirements. + /// + /// This method should be called when schema changes require updates to database sequences, such + /// as after a migration. The specific changes applied depend on the current state of the database and the expected + /// schema. + /// The database connection to use for altering sequences. Must not be null. + void AlterSequences(IUmbracoDatabase database); + + /// + /// Alters the database sequences associated with the specified table. + /// + /// The database connection to use for altering the sequences. Cannot be null. + /// The name of the table whose sequences will be altered. Cannot be null or empty. + void AlterSequences(IUmbracoDatabase database, string tableName); + IEnumerable GetTablesInSchema(IDatabase db); IEnumerable GetColumnsInSchema(IDatabase db); @@ -228,4 +262,6 @@ Sql.SqlJoinClause LeftJoinWithNestedJoin( Sql sql, Func, Sql> nestedJoin, string? alias = null); + + } diff --git a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs index 82bbf26f810e..138015ecf9ff 100644 --- a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs +++ b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs @@ -1,6 +1,7 @@ // Don't remove the unused System using, for some reason this breaks docfx, and I have no clue why. using System; using System.Data; +using System.Data.SqlTypes; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq.Expressions; @@ -158,6 +159,9 @@ public virtual string GetStringColumnWildcardComparison(string column, int param public virtual string GetQuotedValue(string value) => $"'{value}'"; + /// + public virtual string GetNullExtension() => string.Empty; + public virtual string GetIndexType(IndexTypes indexTypes) { var indexType = string.Empty; @@ -257,6 +261,15 @@ public abstract Sql.SqlJoinClause LeftJoinWithNestedJo public virtual bool SupportsIdentityInsert() => true; + /// + public virtual bool SupportsSequences() => false; + + /// + public virtual void AlterSequences(IUmbracoDatabase database) { } + + /// + public virtual void AlterSequences(IUmbracoDatabase database, string tableName) { } + /// /// This is used ONLY if we need to format datetime without using SQL parameters (i.e. during migrations) /// diff --git a/src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseExtensions.cs b/src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseExtensions.cs index 9237db2655b3..97c624e0e821 100644 --- a/src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseExtensions.cs +++ b/src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseExtensions.cs @@ -82,7 +82,7 @@ public static long Count(this IUmbracoDatabase database, Sql sql) // We need to copy the sql into a new object, to avoid this method from changing the sql. var query = new Sql().Select("COUNT(*)").From().Append("(").Append(new Sql(sql.SQL, sql.Arguments)).Append(") as count_query"); - return database.ExecuteScalar(query); + return database.FirstOrDefault(query); } public static async Task CountAsync(this IUmbracoDatabase database, Sql sql) diff --git a/src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseFactory.cs b/src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseFactory.cs index 5ef99e9b540d..11804af7f3b6 100644 --- a/src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseFactory.cs +++ b/src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseFactory.cs @@ -97,7 +97,7 @@ public UmbracoDatabaseFactory( #endregion - private DbProviderFactory? DbProviderFactory + protected DbProviderFactory? DbProviderFactory { get { @@ -281,7 +281,7 @@ private InitializedPocoDataBuilder GetPocoDataFactoryResolver(Type type, IPocoDa => new UmbracoPocoDataBuilder(type, _pocoMappers, _upgrading).Init(); // method used by NPoco's UmbracoDatabaseFactory to actually create the database instance - private UmbracoDatabase? CreateDatabaseInstance() + protected virtual UmbracoDatabase? CreateDatabaseInstance() { if (ConnectionString is null || SqlContext is null || DbProviderFactory is null) { diff --git a/src/Umbraco.Infrastructure/Services/Implement/UserIdKeyResolver.cs b/src/Umbraco.Infrastructure/Services/Implement/UserIdKeyResolver.cs index f8b7e99b2902..754c8adbd85f 100644 --- a/src/Umbraco.Infrastructure/Services/Implement/UserIdKeyResolver.cs +++ b/src/Umbraco.Infrastructure/Services/Implement/UserIdKeyResolver.cs @@ -75,7 +75,6 @@ public async Task> TryGetAsync(Guid key) return Attempt.Fail(); } - _keyToId[key] = fetchedId.Value; return Attempt.Succeed(fetchedId.Value); } @@ -121,7 +120,7 @@ public async Task> TryGetAsync(int id) .From() .Where(x => x.Id == id); - Guid? fetchedKey = scope.Database.ExecuteScalar(query); + Guid? fetchedKey = scope.Database.FirstOrDefault(query); if (fetchedKey is null) { return Attempt.Fail(); diff --git a/src/Umbraco.PublishedCache.HybridCache/Persistence/DatabaseCacheRepository.cs b/src/Umbraco.PublishedCache.HybridCache/Persistence/DatabaseCacheRepository.cs index fbdfe3375876..37d88b365dda 100644 --- a/src/Umbraco.PublishedCache.HybridCache/Persistence/DatabaseCacheRepository.cs +++ b/src/Umbraco.PublishedCache.HybridCache/Persistence/DatabaseCacheRepository.cs @@ -282,22 +282,33 @@ public async Task> GetMediaSourcesAsync(IEnumerabl .Select(x => CreateMediaNodeKit(x, serializer)); } + [Obsolete("Use the typed version OnRepositoryRefreshedTyped instead")] private async Task OnRepositoryRefreshed(IContentCacheDataSerializer serializer, ContentCacheNode content, bool preview) { - ContentNuDto dto = GetDtoFromCacheNode(content, !preview, serializer); + await OnRepositoryRefreshedTyped(serializer, content, preview); + } - string c(string s) => SqlSyntax.GetQuotedColumnName(s); + private async Task OnRepositoryRefreshedTyped(IContentCacheDataSerializer serializer, ContentCacheNode content, bool preview) + { + ContentNuDto dto = GetDtoFromCacheNode(content, !preview, serializer); - await Database.InsertOrUpdateAsync( - dto, - $"SET data = @data, {c("dataRaw")} = @dataRaw, rv = rv + 1 WHERE {c("nodeId")} = @id AND published = @published", - new - { - dataRaw = dto.RawData ?? Array.Empty(), - data = dto.Data, - id = dto.NodeId, - published = dto.Published, - }); + dto.RawData ??= []; + dto.Rv++; + ContentNuDto? existing = await Database.FirstOrDefaultAsync( + Sql() + .SelectAll() + .From() + .Where(x => x.NodeId == dto.NodeId && x.Published == dto.Published)); + if (existing is null) + { + await Database.InsertAsync(dto); + } + else + { + Sql updateSql = Sql().Update(u => u.Set(d => d.Data, dto.Data).Set(rd => rd.RawData, dto.RawData).Set(v => v.Rv, dto.Rv)) + .Where(x => x.NodeId == dto.NodeId && x.Published == dto.Published); + await Database.ExecuteAsync(updateSql); + } } /// diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs index c485e2645366..910990b37d7f 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs @@ -18,7 +18,7 @@ public void Can_Map_Key_Property() new DictionaryTranslationMapper(TestHelper.GetMockSqlContext(), TestHelper.CreateMaps()).Map("Key"); // Assert - Assert.That(column, Is.EqualTo("[cmsLanguageText].[UniqueId]")); + Assert.That(column, Is.EqualTo("[cmsLanguageText].[uniqueId]")); } [Test] diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoSqlExtensionsTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoSqlExtensionsTests.cs index a9aac06f0aa1..18286f0b7ec5 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoSqlExtensionsTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoSqlExtensionsTests.cs @@ -120,13 +120,11 @@ public void WhereInValueFieldTest() [Test] public void WhereInObjectFieldTest() { - // this test used to fail because x => x.Text was evaluated as a lambda - // and returned "[umbracoNode].[text] = @0"... had to fix WhereIn. var sql = new Sql(SqlContext) .Select("*") .From() .WhereIn(x => x.Text, new[] { "a", "b", "c" }); - Assert.AreEqual("SELECT *\nFROM [umbracoNode]\nWHERE ([umbracoNode].[text] IN (@0,@1,@2))", sql.SQL); + Assert.AreEqual("SELECT *\nFROM [umbracoNode]\nWHERE (LOWER([umbracoNode].[text]) IN (@0,@1,@2))", sql.SQL); } [Test] diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs index 6e19ff735e3b..19e58d4badca 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs @@ -120,7 +120,7 @@ public void Can_Verify_AllowedContentTypeIds_Clause() var expected = Sql(); expected.SelectAll() .From("[cmsContentTypeAllowedContentType]") - .Where("([cmsContentTypeAllowedContentType].[Id] = @0)", 1050); + .Where("([cmsContentTypeAllowedContentType].[id] = @0)", 1050); var sql = Sql(); sql.SelectAll() @@ -189,7 +189,7 @@ public void Can_Verify_WhereLike_Clause() @"DELETE FROM [umbracoUserGroup2GranularPermission] WHERE (([umbracoUserGroup2GranularPermission].[uniqueId] = @0)) AND ([umbracoUserGroup2GranularPermission].[permission] LIKE CONCAT(((SELECT - CONVERT(nvarchar(36), [cmsPropertyType].[UniqueId]) + CONVERT(nvarchar(36), [cmsPropertyType].[uniqueId]) FROM [cmsPropertyType] WHERE (([cmsPropertyType].[id] = @1)) From 41ef0df04a1d07dc4147256393b1108972deb3e9 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Wed, 7 Jan 2026 19:08:19 +0100 Subject: [PATCH 02/20] fix 2 unit test --- .../Persistence/Mappers/DictionaryTranslationMapperTest.cs | 2 +- .../Querying/ContentTypeRepositorySqlClausesTest.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs index c485e2645366..910990b37d7f 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs @@ -18,7 +18,7 @@ public void Can_Map_Key_Property() new DictionaryTranslationMapper(TestHelper.GetMockSqlContext(), TestHelper.CreateMaps()).Map("Key"); // Assert - Assert.That(column, Is.EqualTo("[cmsLanguageText].[UniqueId]")); + Assert.That(column, Is.EqualTo("[cmsLanguageText].[uniqueId]")); } [Test] diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs index 6e19ff735e3b..19e58d4badca 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs @@ -120,7 +120,7 @@ public void Can_Verify_AllowedContentTypeIds_Clause() var expected = Sql(); expected.SelectAll() .From("[cmsContentTypeAllowedContentType]") - .Where("([cmsContentTypeAllowedContentType].[Id] = @0)", 1050); + .Where("([cmsContentTypeAllowedContentType].[id] = @0)", 1050); var sql = Sql(); sql.SelectAll() @@ -189,7 +189,7 @@ public void Can_Verify_WhereLike_Clause() @"DELETE FROM [umbracoUserGroup2GranularPermission] WHERE (([umbracoUserGroup2GranularPermission].[uniqueId] = @0)) AND ([umbracoUserGroup2GranularPermission].[permission] LIKE CONCAT(((SELECT - CONVERT(nvarchar(36), [cmsPropertyType].[UniqueId]) + CONVERT(nvarchar(36), [cmsPropertyType].[uniqueId]) FROM [cmsPropertyType] WHERE (([cmsPropertyType].[id] = @1)) From b05db12ae7b5b80a34052567d571c8a41e1dfbbf Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Thu, 8 Jan 2026 17:13:30 +0100 Subject: [PATCH 03/20] Replace nameof(DTO.COLUMN_NAME) by constant, because it leads to casing issues for case sensitive databses --- .../Controllers/DataType/Tree/DataTypeTreeControllerBase.cs | 4 ++-- .../Controllers/Document/Tree/DocumentTreeControllerBase.cs | 2 +- .../Tree/DocumentBlueprintTreeControllerBase.cs | 4 ++-- .../Controllers/Media/Tree/MediaTreeControllerBase.cs | 2 +- .../Controllers/RecycleBin/RecycleBinControllerBase.cs | 2 +- .../Controllers/Tree/EntityTreeControllerBase.cs | 2 +- .../Controllers/Tree/FolderTreeControllerBase.cs | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs index e3bcf686b47b..65009d847d4d 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DataType/Tree/DataTypeTreeControllerBase.cs @@ -43,8 +43,8 @@ protected override Ordering ItemOrdering { get { - var ordering = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectType), Direction.Descending); // We need to override to change direction - ordering.Next = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text)); + var ordering = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectTypeColumnName, Direction.Descending); // We need to override to change direction + ordering.Next = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName); return ordering; } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs index 11e205c39fb5..bb61e01e96a5 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Document/Tree/DocumentTreeControllerBase.cs @@ -70,7 +70,7 @@ protected DocumentTreeControllerBase( protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Document; - protected override Ordering ItemOrdering => Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.SortOrder)); + protected override Ordering ItemOrdering => Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.SortOrderColumnName); protected override DocumentTreeItemResponseModel MapTreeItemViewModel(Guid? parentId, IEntitySlim entity) { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs index ad6330498ec3..b3d7a9889ff1 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentBlueprint/Tree/DocumentBlueprintTreeControllerBase.cs @@ -43,8 +43,8 @@ protected override Ordering ItemOrdering { get { - var ordering = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectType), Direction.Descending); // We need to override to change direction - ordering.Next = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text)); + var ordering = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectTypeColumnName, Direction.Descending); // We need to override to change direction + ordering.Next = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName); return ordering; } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs index 4990c1aaff57..ef639895d8fd 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Media/Tree/MediaTreeControllerBase.cs @@ -64,7 +64,7 @@ public MediaTreeControllerBase( protected override UmbracoObjectTypes ItemObjectType => UmbracoObjectTypes.Media; - protected override Ordering ItemOrdering => Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.SortOrder)); + protected override Ordering ItemOrdering => Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.SortOrderColumnName); protected override MediaTreeItemResponseModel MapTreeItemViewModel(Guid? parentKey, IEntitySlim entity) { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs index 59e10df4542a..d386a2cf1ecb 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/RecycleBin/RecycleBinControllerBase.cs @@ -168,7 +168,7 @@ protected virtual IEntitySlim[] GetSiblingEntities(Guid target, int before, int after, out totalBefore, out totalAfter, - ordering: Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text))) + ordering: Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName)) .ToArray(); /// diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Tree/EntityTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Tree/EntityTreeControllerBase.cs index d96c597ad2e9..599a25fa0950 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Tree/EntityTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Tree/EntityTreeControllerBase.cs @@ -36,7 +36,7 @@ protected EntityTreeControllerBase(IEntityService entityService, FlagProviderCol protected abstract UmbracoObjectTypes ItemObjectType { get; } - protected virtual Ordering ItemOrdering => Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text)); + protected virtual Ordering ItemOrdering => Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName); protected async Task>> GetRoot(int skip, int take) { diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Tree/FolderTreeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Tree/FolderTreeControllerBase.cs index 9d8d3e732c61..e557a0ee4849 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Tree/FolderTreeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Tree/FolderTreeControllerBase.cs @@ -24,8 +24,8 @@ protected override Ordering ItemOrdering get { // Override to order by type (folder vs item) before the text - var ordering = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectType)); - ordering.Next = Ordering.By(nameof(Infrastructure.Persistence.Dtos.NodeDto.Text)); + var ordering = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.NodeObjectTypeColumnName); + ordering.Next = Ordering.By(Infrastructure.Persistence.Dtos.NodeDto.TextColumnName); return ordering; } From ee84947381d472b141517da5198e4ba04cc36c3a Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Thu, 8 Jan 2026 19:59:04 +0100 Subject: [PATCH 04/20] fix Copilot review comments --- .../Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs | 7 ++++--- .../Persistence/Dtos/PropertyTypeDto.cs | 4 ++-- .../Persistence/Dtos/PropertyTypeGroupDto.cs | 2 +- .../Persistence/Dtos/User2NodeNotifyDto.cs | 5 +++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs index 0e3b7a635984..037810453f4b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs @@ -11,15 +11,16 @@ internal sealed class ContentTypeAllowedContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentChildType; public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string NodeIdColumnName = Constants.DatabaseSchema.NodeIdName; public const string AllowedIdName = "AllowedId"; [Column(PrimaryKeyName)] - [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = "nodeId")] - [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = $"{PrimaryKeyName}, AllowedId")] + [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = NodeIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = $"{PrimaryKeyName}, {AllowedIdName}")] public int Id { get; set; } [Column(AllowedIdName)] - [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = "nodeId")] + [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = NodeIdColumnName)] public int AllowedId { get; set; } [Column("SortOrder")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs index 997b82d0c0c5..7f69d59c8db4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs @@ -14,7 +14,7 @@ internal class PropertyTypeDto public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; public const string DataTypeIdName = "dataTypeId"; public const string ContentTypeIdName = "contentTypeId"; - public const string PorpertyTypeGroupIdName = "propertyTypeGroupId"; + public const string PropertyTypeGroupIdName = "propertyTypeGroupId"; private string? _alias; @@ -30,7 +30,7 @@ internal class PropertyTypeDto [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] public int ContentTypeId { get; set; } - [Column(PorpertyTypeGroupIdName)] + [Column(PropertyTypeGroupIdName)] [NullSetting(NullSetting = NullSettings.Null)] [ForeignKey(typeof(PropertyTypeGroupDto))] public int? PropertyTypeGroupId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs index 5457c449dbee..d85bd665b9c5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs @@ -43,6 +43,6 @@ internal sealed class PropertyTypeGroupDto public int SortOrder { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.PorpertyTypeGroupIdName)] + [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.PropertyTypeGroupIdName)] public List PropertyTypeDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs index 2a778d3bb778..c2f49c10e3ef 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs @@ -12,9 +12,10 @@ internal sealed class User2NodeNotifyDto public const string TableName = Constants.DatabaseSchema.Tables.User2NodeNotify; public const string PrimaryKeyName = "userId"; public const string NodeIdColumnName = Constants.DatabaseSchema.NodeIdName; + public const string ActionColumnName = "action"; [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyName}, nodeId, action")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyName}, {NodeIdColumnName}, {ActionColumnName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } @@ -22,7 +23,7 @@ internal sealed class User2NodeNotifyDto [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } - [Column("action")] + [Column(ActionColumnName)] [Length(255)] public string? Action { get; set; } } From 2398483d72b787a01cdcb643180348dfdfc2f619 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Fri, 9 Jan 2026 11:48:54 +0100 Subject: [PATCH 05/20] resolve review comments --- .../UmbracoDbContext.cs | 2 +- .../Persistence/Constants-DatabaseSchema.cs | 21 ++++++++++++------- .../Persistence/Dtos/AccessDto.cs | 2 +- .../Persistence/Dtos/AccessRuleDto.cs | 2 +- .../Persistence/Dtos/AuditEntryDto.cs | 2 +- .../Persistence/Dtos/CacheInstructionDto.cs | 2 +- .../Persistence/Dtos/ConsentDto.cs | 2 +- .../Persistence/Dtos/ContentDto.cs | 2 +- .../Persistence/Dtos/ContentScheduleDto.cs | 2 +- .../Dtos/ContentTypeAllowedContentTypeDto.cs | 10 +++++---- .../Dtos/ContentVersionCultureVariationDto.cs | 2 +- .../Persistence/Dtos/ContentVersionDto.cs | 2 +- .../Dtos/CreatedPackageSchemaDto.cs | 2 +- .../Persistence/Dtos/DictionaryDto.cs | 2 +- .../Persistence/Dtos/DistributedJobDto.cs | 2 +- .../Dtos/DocumentCultureVariationDto.cs | 2 +- .../Persistence/Dtos/DocumentUrlDto.cs | 2 +- .../Persistence/Dtos/DocumentVersionDto.cs | 2 +- .../Persistence/Dtos/DomainDto.cs | 2 +- .../Persistence/Dtos/ExternalLoginDto.cs | 2 +- .../Persistence/Dtos/ExternalLoginTokenDto.cs | 2 +- .../Persistence/Dtos/KeyValueDto.cs | 2 +- .../Persistence/Dtos/LanguageDto.cs | 2 +- .../Persistence/Dtos/LanguageTextDto.cs | 2 +- .../Persistence/Dtos/LockDto.cs | 2 +- .../Persistence/Dtos/LogDto.cs | 2 +- .../Persistence/Dtos/LogViewerQueryDto.cs | 2 +- .../Dtos/LongRunningOperationDto.cs | 2 +- .../Persistence/Dtos/MediaVersionDto.cs | 2 +- .../Persistence/Dtos/MemberPropertyTypeDto.cs | 2 +- .../Persistence/Dtos/NodeDto.cs | 2 +- .../Persistence/Dtos/PropertyDataDto.cs | 2 +- .../Persistence/Dtos/PropertyTypeDto.cs | 2 +- .../Persistence/Dtos/PropertyTypeGroupDto.cs | 2 +- .../Dtos/PropertyTypeGroupReadOnlyDto.cs | 2 +- .../Dtos/PropertyTypeReadOnlyDto.cs | 2 +- .../Persistence/Dtos/RedirectUrlDto.cs | 2 +- .../Persistence/Dtos/RelationDto.cs | 2 +- .../Persistence/Dtos/RelationTypeDto.cs | 2 +- .../Persistence/Dtos/ServerRegistrationDto.cs | 2 +- .../Persistence/Dtos/TagDto.cs | 2 +- .../Persistence/Dtos/TemplateDto.cs | 2 +- .../Persistence/Dtos/TwoFactorLoginDto.cs | 2 +- .../Persistence/Dtos/User2NodeNotifyDto.cs | 6 +++--- .../Persistence/Dtos/UserDataDto.cs | 2 +- .../Persistence/Dtos/UserDto.cs | 2 +- .../Persistence/Dtos/UserGroup2AppDto.cs | 2 +- .../Dtos/UserGroup2GranularPermissionDto.cs | 4 ++-- .../Dtos/UserGroup2PermissionDto.cs | 2 +- .../Persistence/Dtos/UserGroupDto.cs | 4 ++-- .../Persistence/Dtos/UserStartNodeDto.cs | 2 +- .../Persistence/Dtos/Webhook2HeadersDto.cs | 3 ++- .../Persistence/Dtos/WebhookDto.cs | 2 +- .../Persistence/Dtos/WebhookLogDto.cs | 2 +- .../Persistence/Dtos/WebhookRequestDto.cs | 2 +- .../DictionaryTranslationMapperTest.cs | 2 +- .../ContentTypeRepositorySqlClausesTest.cs | 4 ++-- 57 files changed, 80 insertions(+), 72 deletions(-) diff --git a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs index ca69e31727d2..793a3d675a50 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs @@ -84,7 +84,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes()) { - entity.SetTableName(Core.Constants.DatabaseSchema.TableNamePrefix + entity.GetTableName()); + entity.SetTableName(Core.Constants.DatabaseSchema.Tables.TableNamePrefix + entity.GetTableName()); } } } diff --git a/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs b/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs index f785b005ab84..e359c70335c3 100644 --- a/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs +++ b/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs @@ -6,17 +6,22 @@ public static partial class Constants { public static class DatabaseSchema { - // TODO: Why aren't all table names with the same prefix? - public const string TableNamePrefix = "umbraco"; - - public const string PrimaryKeyNameId = "id"; - public const string PrimaryKeyNamePK = "pk"; - public const string PrimaryKeyNameKey = "key"; - public const string NodeIdName = "nodeId"; - public const string UniqueIdName = "uniqueId"; + public static class Columns + { + // Defines constants for common field names used throughout the database, to ensure + // casing is aligned wherever used. + public const string PrimaryKeyNameId = "id"; + public const string PrimaryKeyNamePk = "pk"; + public const string PrimaryKeyNameKey = "key"; + public const string NodeIdName = "nodeId"; + public const string UniqueIdName = "uniqueId"; + } public static class Tables { + // TODO: Why aren't all table names with the same prefix? + public const string TableNamePrefix = "umbraco"; + public const string Lock = TableNamePrefix + "Lock"; public const string Log = TableNamePrefix + "Log"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs index e4148b632a0d..2d99f87ba056 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class AccessDto { public const string TableName = Constants.DatabaseSchema.Tables.Access; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoAccess", AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs index db100cc5e4e9..dd12fc334fbd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class AccessRuleDto { public const string TableName = Constants.DatabaseSchema.Tables.AccessRule; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoAccessRule", AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs index e0fd1a5a486f..d39dd8bba40f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class AuditEntryDto { public const string TableName = Constants.DatabaseSchema.Tables.AuditEntry; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs index 160918932578..fc4bef2a4cb7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class CacheInstructionDto { public const string TableName = Constants.DatabaseSchema.Tables.CacheInstruction; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [NullSetting(NullSetting = NullSettings.NotNull)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs index d7de1e8209f1..2da6a6db9750 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class ConsentDto { public const string TableName = Constants.DatabaseSchema.Tables.Consent; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs index ff907623ccc2..49790c00ac27 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class ContentDto { public const string TableName = Constants.DatabaseSchema.Tables.Content; - public const string PrimaryKeyName = Constants.DatabaseSchema.NodeIdName; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; public const string ContentTypeIdName = "contentTypeId"; [Column(PrimaryKeyName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs index d7bba22fe868..a4ebdd56b17d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ContentScheduleDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentSchedule; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs index 037810453f4b..d3f2c8c64618 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs @@ -10,17 +10,19 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ContentTypeAllowedContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentChildType; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - public const string NodeIdColumnName = Constants.DatabaseSchema.NodeIdName; + + // ToDo: Here we have an incosistent column name in DatabaseSchema. It should be Constants.DatabaseSchema.Columns.PrimaryKeyNameId; ("id" + public const string PrimaryKeyName = "Id"; + public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; public const string AllowedIdName = "AllowedId"; [Column(PrimaryKeyName)] - [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = NodeIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = NodeIdName)] [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = $"{PrimaryKeyName}, {AllowedIdName}")] public int Id { get; set; } [Column(AllowedIdName)] - [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = NodeIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = NodeIdName)] public int AllowedId { get; set; } [Column("SortOrder")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs index 3d0295643569..008adb30afc5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ContentVersionCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersionCultureVariation; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; private int? _updateUserId; [Column(PrimaryKeyName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs index 454ac7c87b3a..f95fece8a755 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class ContentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; private int? _userId; [Column(PrimaryKeyName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs index d74026fd05ee..c8b5ecf2e0c9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class CreatedPackageSchemaDto { public const string TableName = Constants.DatabaseSchema.Tables.CreatedPackageSchema; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs index df5d3d10b517..4f976f02c4ba 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class DictionaryDto // public as required to be accessible from Deploy for the RepairDictionaryIdsWorkItem. { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryEntry; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNamePK; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs index 75c5095b6d92..2f263dff4724 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class DistributedJobDto { public const string TableName = Constants.DatabaseSchema.Tables.DistributedJob; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs index 280982cbe913..3d60598eb68b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class DocumentCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentCultureVariation; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs index abb6e2b6dd3d..18626f7990a1 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class DocumentUrlDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentUrl; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(Clustered = false, AutoIncrement = true)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs index 23b75b52dd23..a5cbdd1c3651 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class DocumentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs index c4f5477a0094..b2a87a4f21b3 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class DomainDto { public const string TableName = Constants.DatabaseSchema.Tables.Domain; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs index 7149cd38d5de..c0d5b538e84f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ExternalLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.ExternalLogin; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs index d82384e3d827..ab7e3a5d5afd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ExternalLoginTokenDto { public const string TableName = Constants.DatabaseSchema.Tables.ExternalLoginToken; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs index aa86e31da66d..483c7de0a81d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs @@ -12,7 +12,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class KeyValueDto { public const string TableName = Constants.DatabaseSchema.Tables.KeyValue; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameKey; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; [Column(PrimaryKeyName)] [Length(256)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs index 1a212a9a1041..5fdcbbfa1724 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class LanguageDto { public const string TableName = Constants.DatabaseSchema.Tables.Language; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; // Public constants to bind properties between DTOs public const string IsoCodeColumnName = "languageISOCode"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs index 590da8682919..e8a89b2334aa 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class LanguageTextDto { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryValue; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNamePK; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs index 1f08567666ce..3fadbbfba5c7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class LockDto { public const string TableName = Constants.DatabaseSchema.Tables.Lock; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoLock", AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs index 094a7823f3c2..9a8a18bc7b4e 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class LogDto { public const string TableName = Constants.DatabaseSchema.Tables.Log; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; private int? _userId; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs index ba5692832d6e..31c90765530c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class LogViewerQueryDto { public const string TableName = Constants.DatabaseSchema.Tables.LogViewerQuery; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs index 901fc4c24763..9d1baa939a0e 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal class LongRunningOperationDto { public const string TableName = Constants.DatabaseSchema.Tables.LongRunningOperation; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoLongRunningOperation", AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs index 001838eb96f5..629d8e2fc294 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class MediaVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.MediaVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs index 0d55bdd40087..7dbaa34bf294 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class MemberPropertyTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.MemberPropertyType; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNamePK; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; public const string NodeIdName = "nodeId"; [Column(PrimaryKeyName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs index 72c77eb2a79d..ca1c6fc77f26 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class NodeDto { public const string TableName = Constants.DatabaseSchema.Tables.Node; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const int NodeIdSeed = 1060; // Public constants to bind properties between DTOs diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs index d4e5a87e749d..123d8141ea39 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class PropertyDataDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyData; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const string PropertyTypeIdName = "propertyTypeId"; public const string VersionIdName = "versionId"; public const int VarcharLength = 512; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs index 7f69d59c8db4..5b1ca912b029 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal class PropertyTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const string DataTypeIdName = "dataTypeId"; public const string ContentTypeIdName = "contentTypeId"; public const string PropertyTypeGroupIdName = "propertyTypeGroupId"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs index d85bd665b9c5..d50de6b12292 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class PropertyTypeGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const string ContentTypeNodeIdName = "contenttypeNodeId"; public const string UniqueIdName = "uniqueId"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs index a92a6b988606..ca221eed0c23 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs @@ -9,7 +9,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class PropertyTypeGroupReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; - public const string PrimaryKeyName = "PropertyTypeGroupId"; // Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = "PropertyTypeGroupId"; // Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] public int? Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs index f219dd65db39..105405c6d445 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs @@ -9,7 +9,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class PropertyTypeReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; - public const string PrimaryKeyName = "PropertyTypeId"; // Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = "PropertyTypeId"; // Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] public int? Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs index 53cc35c2f629..1ae602dca9f7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class RedirectUrlDto { public const string TableName = Constants.DatabaseSchema.Tables.RedirectUrl; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public RedirectUrlDto() => CreateDateUtc = DateTime.UtcNow; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs index 26af048cdbd2..c871dce6db93 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class RelationDto { public const string TableName = Constants.DatabaseSchema.Tables.Relation; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs index 8e7580ea38cf..c62c0877cdc3 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class RelationTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.RelationType; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const int NodeIdSeed = 10; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs index ef19f51f03df..99907652a085 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ServerRegistrationDto { public const string TableName = Constants.DatabaseSchema.Tables.Server; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs index af75d03bd5d3..42b605ce91db 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class TagDto { public const string TableName = Constants.DatabaseSchema.Tables.Tag; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs index f11eab7f36e3..9ea63850dbaa 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class TemplateDto { public const string TableName = Constants.DatabaseSchema.Tables.Template; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNamePK; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs index df2ee262e5c1..2c67f410f83f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class TwoFactorLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.TwoFactorLogin; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs index c2f49c10e3ef..f0bea89273e7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs @@ -11,15 +11,15 @@ internal sealed class User2NodeNotifyDto { public const string TableName = Constants.DatabaseSchema.Tables.User2NodeNotify; public const string PrimaryKeyName = "userId"; - public const string NodeIdColumnName = Constants.DatabaseSchema.NodeIdName; + public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; public const string ActionColumnName = "action"; [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyName}, {NodeIdColumnName}, {ActionColumnName}")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyName}, {NodeIdName}, {ActionColumnName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column(NodeIdColumnName)] + [Column(NodeIdName)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs index 8c6780c2009f..28fb48185cbc 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class UserDataDto { public const string TableName = Constants.DatabaseSchema.Tables.UserData; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameKey; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoUserDataDto", AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs index f8254ac659e0..b01435e05de4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class UserDto { public const string TableName = Constants.DatabaseSchema.Tables.User; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public UserDto() { diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs index 09cdc8d25171..755ad1fa5340 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class UserGroup2AppDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2App; - public const string PrimaryKeyName = "userGroupId"; // Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = "userGroupId"; // Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = "userGroupId, app")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs index be32f86f3286..d1693b471621 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs @@ -10,8 +10,8 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class UserGroup2GranularPermissionDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2GranularPermission; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - public const string UniqueIdName = Constants.DatabaseSchema.UniqueIdName; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string UniqueIdName = Constants.DatabaseSchema.Columns.UniqueIdName; [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_umbracoUserGroup2GranularPermissionDto", AutoIncrement = true)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs index e5d180341b38..14856d8db57c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class UserGroup2PermissionDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2Permission; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(Name = "PK_userGroup2Permission", AutoIncrement = true)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs index 38d7a7f3241b..70cae402f08a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs @@ -11,8 +11,8 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class UserGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; - public const string KeyColumnName = Constants.DatabaseSchema.PrimaryKeyNameKey; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string KeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; public UserGroupDto() { diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs index 07af9f45003c..a4c082b3d104 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class UserStartNodeDto : IEquatable { public const string TableName = Constants.DatabaseSchema.Tables.UserStartNode; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public enum StartNodeTypeValue { diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs index 1d08139aa46b..81305f048493 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs @@ -9,6 +9,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class Webhook2HeadersDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook2Headers; + public const string ValueName = "Value"; [Column("webhookId")] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_headers2WebhookDto", OnColumns = "webhookId, key")] @@ -18,6 +19,6 @@ public class Webhook2HeadersDto [Column("key")] public string Key { get; set; } = string.Empty; - [Column("value")] + [Column(ValueName)] public string Value { get; set; } = string.Empty; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs index 6217aafb7713..0bcf0f645a03 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class WebhookDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs index 31b4f0b6b941..2a53acc41c17 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class WebhookLogDto { public const string TableName = Constants.DatabaseSchema.Tables.WebhookLog; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs index e1d018a5e1be..b3d63c5c90cb 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class WebhookRequestDto { public const string TableName = Constants.DatabaseSchema.Tables.WebhookRequest; - public const string PrimaryKeyName = Constants.DatabaseSchema.PrimaryKeyNameId; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = true)] diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs index 910990b37d7f..c485e2645366 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs @@ -18,7 +18,7 @@ public void Can_Map_Key_Property() new DictionaryTranslationMapper(TestHelper.GetMockSqlContext(), TestHelper.CreateMaps()).Map("Key"); // Assert - Assert.That(column, Is.EqualTo("[cmsLanguageText].[uniqueId]")); + Assert.That(column, Is.EqualTo("[cmsLanguageText].[UniqueId]")); } [Test] diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs index 19e58d4badca..6e19ff735e3b 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs @@ -120,7 +120,7 @@ public void Can_Verify_AllowedContentTypeIds_Clause() var expected = Sql(); expected.SelectAll() .From("[cmsContentTypeAllowedContentType]") - .Where("([cmsContentTypeAllowedContentType].[id] = @0)", 1050); + .Where("([cmsContentTypeAllowedContentType].[Id] = @0)", 1050); var sql = Sql(); sql.SelectAll() @@ -189,7 +189,7 @@ public void Can_Verify_WhereLike_Clause() @"DELETE FROM [umbracoUserGroup2GranularPermission] WHERE (([umbracoUserGroup2GranularPermission].[uniqueId] = @0)) AND ([umbracoUserGroup2GranularPermission].[permission] LIKE CONCAT(((SELECT - CONVERT(nvarchar(36), [cmsPropertyType].[uniqueId]) + CONVERT(nvarchar(36), [cmsPropertyType].[UniqueId]) FROM [cmsPropertyType] WHERE (([cmsPropertyType].[id] = @1)) From 1390acf0d79dc0fb3641b8e7e13c9f8008b805a3 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Fri, 9 Jan 2026 14:39:41 +0100 Subject: [PATCH 06/20] replace more hard coded strings --- .../Persistence/Dtos/ContentNuDto.cs | 14 ++++++++------ .../Dtos/ContentTypeAllowedContentTypeDto.cs | 3 ++- .../Persistence/Dtos/ContentTypeDto.cs | 4 ++-- .../Dtos/ContentTypeTemplateDto.cs | 9 +++++---- .../Dtos/ContentVersionCleanupPolicyDto.cs | 2 +- .../Dtos/ContentVersionCultureVariationDto.cs | 19 ++++++++++++------- .../Persistence/Dtos/DataTypeDto.cs | 2 +- .../Persistence/Dtos/DictionaryDto.cs | 6 ++++-- .../Persistence/Dtos/DocumentDto.cs | 2 +- .../Persistence/Dtos/DocumentVersionDto.cs | 12 +++++++----- .../Persistence/Dtos/LanguageTextDto.cs | 12 +++++++----- .../Persistence/Dtos/Member2MemberGroupDto.cs | 5 +++-- .../Persistence/Dtos/MemberDto.cs | 2 +- .../Persistence/Dtos/MemberPropertyTypeDto.cs | 2 +- .../Persistence/Dtos/NodeDto.cs | 2 +- .../Persistence/Dtos/PropertyTypeGroupDto.cs | 2 +- .../Dtos/PropertyTypeGroupReadOnlyDto.cs | 2 +- .../Dtos/PropertyTypeReadOnlyDto.cs | 2 +- .../Persistence/Dtos/TagRelationshipDto.cs | 14 ++++++++------ .../Persistence/Dtos/TemplateDto.cs | 6 ++++-- .../Persistence/Dtos/User2ClientIdDto.cs | 5 +++-- .../Persistence/Dtos/UserGroup2AppDto.cs | 5 +++-- .../Persistence/Dtos/Webhook2HeadersDto.cs | 8 +++++--- 23 files changed, 82 insertions(+), 58 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs index 57367faf2119..77468e8bb902 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs @@ -11,15 +11,17 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class ContentNuDto { public const string TableName = Constants.DatabaseSchema.Tables.NodeData; - public const string PrimaryKeyName = "nodeId"; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PublishedName = "published"; + public const string RvName = "rv"; [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsContentNu", OnColumns = "nodeId, published")] - [ForeignKey(typeof(ContentDto), Column = "nodeId", OnDelete = Rule.Cascade)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsContentNu", OnColumns = $"{PrimaryKeyName}, {PublishedName}")] + [ForeignKey(typeof(ContentDto), Column = PrimaryKeyName, OnDelete = Rule.Cascade)] public int NodeId { get; set; } - [Column("published")] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = "published,nodeId,rv", IncludeColumns = "dataRaw")] + [Column(PublishedName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = $"{PublishedName},{PrimaryKeyName},{RvName}", IncludeColumns = "dataRaw")] public bool Published { get; set; } /// @@ -33,7 +35,7 @@ public class ContentNuDto [NullSetting(NullSetting = NullSettings.Null)] public string? Data { get; set; } - [Column("rv")] + [Column(RvName)] public long Rv { get; set; } [Column("dataRaw")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs index d3f2c8c64618..a5d906298677 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs @@ -11,7 +11,8 @@ internal sealed class ContentTypeAllowedContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentChildType; - // ToDo: Here we have an incosistent column name in DatabaseSchema. It should be Constants.DatabaseSchema.Columns.PrimaryKeyNameId; ("id" + // ToDo: Here we have an incosistent column name in DatabaseSchema. It should be Constants.DatabaseSchema.Columns.PrimaryKeyNameId; ("id") + // For now we leave the databse schema as is to avoid breaking changes. public const string PrimaryKeyName = "Id"; public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; public const string AllowedIdName = "AllowedId"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs index ec9269606511..d30877eabfe9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs @@ -10,8 +10,8 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal class ContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentType; - public const string PrimaryKeyName = "pk"; - public const string NodeIdName = "nodeId"; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; private string? _alias; // Public constants to bind properties between DTOs diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs index 6dcb53948c28..ef03626eed5c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs @@ -11,15 +11,16 @@ internal sealed class ContentTypeTemplateDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentType; public const string PrimaryKeyName = "contentTypeNodeId"; + public const string TemplateNodeIdName = "templateNodeId"; [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsDocumentType", OnColumns = "contentTypeNodeId, templateNodeId")] - [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsDocumentType", OnColumns = $"{PrimaryKeyName}, {TemplateNodeIdName}")] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] [ForeignKey(typeof(NodeDto))] public int ContentTypeNodeId { get; set; } - [Column("templateNodeId")] - [ForeignKey(typeof(TemplateDto), Column = "nodeId")] + [Column(TemplateNodeIdName)] + [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdName)] public int TemplateNodeId { get; set; } [Column("IsDefault")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs index 34cbd1639f6c..c5db02bd7728 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs @@ -14,7 +14,7 @@ internal sealed class ContentVersionCleanupPolicyDto [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoContentVersionCleanupPolicy")] - [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] public int ContentTypeId { get; set; } [Column("preventCleanup")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs index 008adb30afc5..fa4614f57eee 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs @@ -11,18 +11,23 @@ internal sealed class ContentVersionCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersionCultureVariation; public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string LanguageIdName = "languageId"; + public const string VersionIdName = "versionId"; + public const string UpdateUserIdName = "availableUserId"; + public const string UpdateDateName = "date"; + public const string NameName = "name"; private int? _updateUserId; [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("versionId")] - [ForeignKey(typeof(ContentVersionDto), Name = "FK_umbContentVersionCultureVariation_umbContentVersion_id")] // needs to be shorter than 64 chars for e.g. PostgreSQL - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = "versionId,languageId", IncludeColumns = "id,name,date,availableUserId")] + [Column(VersionIdName)] + [ForeignKey(typeof(ContentVersionDto), Name = "FK_umbContentVersionCultureVariation_umbContentVersion_id")] // needs to be shorter than 64 chars for e.g. PostgreSQL! + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{LanguageIdName}", IncludeColumns = $"{PrimaryKeyName},{NameName},{UpdateDateName},{UpdateUserIdName}")] public int VersionId { get; set; } - [Column("languageId")] + [Column(LanguageIdName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] public int LanguageId { get; set; } @@ -31,13 +36,13 @@ internal sealed class ContentVersionCultureVariationDto [Ignore] public string? Culture { get; set; } - [Column("name")] + [Column(NameName)] public string? Name { get; set; } - [Column("date")] // TODO: db rename to 'updateDate' + [Column(UpdateDateName)] // TODO: db rename to 'updateDate' public DateTime UpdateDate { get; set; } - [Column("availableUserId")] // TODO: db rename to 'updateDate' + [Column(UpdateUserIdName)] // TODO: db rename to 'updateDate' [ForeignKey(typeof(UserDto))] [NullSetting(NullSetting = NullSettings.Null)] public int? UpdateUserId diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs index 6ff1cbae1728..199f01ac1a44 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class DataTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.DataType; - public const string PrimaryKeyName = "nodeId"; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs index 4f976f02c4ba..16d160fd9a26 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs @@ -11,12 +11,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryEntry; public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string ReferenceName = "UniqueId"; + public const string UniqueIdName = "id"; [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column("id")] + [Column(UniqueIdName)] [Index(IndexTypes.UniqueNonClustered)] public Guid UniqueId { get; set; } @@ -32,6 +34,6 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public string Key { get; set; } = null!; [ResultColumn] - [Reference(ReferenceType.Many, ColumnName = "uniqueId", ReferenceMemberName = "uniqueId")] + [Reference(ReferenceType.Many, ColumnName = ReferenceName, ReferenceMemberName = ReferenceName)] public List LanguageTextDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs index 435a539cc544..5bda35ad2e34 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class DocumentDto { public const string TableName = Constants.DatabaseSchema.Tables.Document; - public const string PrimaryKeyName = "nodeId"; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; // Public constants to bind properties between DTOs diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs index a5cbdd1c3651..f779463227aa 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs @@ -11,20 +11,22 @@ public class DocumentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentVersion; public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PublishedName = "published"; + public const string TemplateIdName = "templateId"; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = "id,published", IncludeColumns = "templateId")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = $"{PrimaryKeyName},{PublishedName}", IncludeColumns = TemplateIdName)] public int Id { get; set; } - [Column("templateId")] + [Column(TemplateIdName)] [NullSetting(NullSetting = NullSettings.Null)] - [ForeignKey(typeof(TemplateDto), Column = "nodeId")] + [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdName)] public int? TemplateId { get; set; } - [Column("published")] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = "published", IncludeColumns = "id,templateId")] + [Column(PublishedName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = PublishedName, IncludeColumns = $"{PrimaryKeyName},{TemplateIdName}")] public bool Published { get; set; } [ResultColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs index e8a89b2334aa..8212b77041c6 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs @@ -11,18 +11,20 @@ public class LanguageTextDto { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryValue; public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string LanguageIdName = "languageId"; + public const string UniqueIdName = Constants.DatabaseSchema.Columns.UniqueIdName; [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column("languageId")] - [ForeignKey(typeof(LanguageDto), Column = "id")] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_languageId", ForColumns = "languageId,uniqueId")] + [Column(LanguageIdName)] + [ForeignKey(typeof(LanguageDto), Column = LanguageDto.PrimaryKeyName)] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_languageId", ForColumns = $"{LanguageIdName},{UniqueIdName}")] public int LanguageId { get; set; } - [Column("uniqueId")] - [ForeignKey(typeof(DictionaryDto), Column = "id")] + [Column(UniqueIdName)] + [ForeignKey(typeof(DictionaryDto), Column = DictionaryDto.UniqueIdName)] public Guid UniqueId { get; set; } [Column("value")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs index 9b6e45a9027b..957e3b148b29 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs @@ -11,13 +11,14 @@ internal sealed class Member2MemberGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.Member2MemberGroup; public const string PrimaryKeyName = "Member"; + public const string MemberGroupName = "MemberGroup"; [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyName}, MemberGroup")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyName}, {MemberGroupName}")] [ForeignKey(typeof(MemberDto))] public int Member { get; set; } - [Column("MemberGroup")] + [Column(MemberGroupName)] [ForeignKey(typeof(NodeDto))] public int MemberGroup { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs index 240d1bfbafb6..ac92c951ae2f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class MemberDto { private const string TableName = Constants.DatabaseSchema.Tables.Member; - public const string PrimaryKeyName = "nodeId"; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs index 7dbaa34bf294..99aa11c864c9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs @@ -11,7 +11,7 @@ internal sealed class MemberPropertyTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.MemberPropertyType; public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string NodeIdName = "nodeId"; + public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs index ca1c6fc77f26..aae44b90491c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs @@ -16,7 +16,7 @@ public class NodeDto // Public constants to bind properties between DTOs public const string IdColumnName = PrimaryKeyName; - public const string KeyColumnName = "uniqueId"; + public const string KeyColumnName = Constants.DatabaseSchema.Columns.UniqueIdName; public const string ParentIdColumnName = "parentId"; public const string SortOrderColumnName = "sortOrder"; public const string TrashedColumnName = "trashed"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs index d50de6b12292..e27019533120 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs @@ -13,7 +13,7 @@ internal sealed class PropertyTypeGroupDto public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const string ContentTypeNodeIdName = "contenttypeNodeId"; - public const string UniqueIdName = "uniqueId"; + public const string UniqueIdName = "uniqueID"; [Column(PrimaryKeyName)] [PrimaryKeyColumn(IdentitySeed = 56)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs index ca221eed0c23..fdbba9e8bc57 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs @@ -9,7 +9,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class PropertyTypeGroupReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; - public const string PrimaryKeyName = "PropertyTypeGroupId"; // Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyName = "PropertyTypeGroupId"; // there is an inconsistency in main branch between atributtes [Column(PrimaryKeyName)] public int? Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs index 105405c6d445..b609ab867cd7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs @@ -9,7 +9,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class PropertyTypeReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; - public const string PrimaryKeyName = "PropertyTypeId"; // Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyName = "PropertyTypeId"; // there is an inconsistency in main branch between atributtes [Column(PrimaryKeyName)] public int? Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs index 77073efc477c..c6d25795f296 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs @@ -10,19 +10,21 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class TagRelationshipDto { public const string TableName = Constants.DatabaseSchema.Tables.TagRelationship; - public const string PrimaryKeyName = "nodeId"; + public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PropertyTypeIdName = "propertyTypeId"; + public const string TagIdName = "tagId"; [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsTagRelationship", OnColumns = "nodeId, propertyTypeId, tagId")] - [ForeignKey(typeof(ContentDto), Name = "FK_cmsTagRelationship_cmsContent", Column = "nodeId")] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_tagId_nodeId", ForColumns = "tagId,nodeId", IncludeColumns = "propertyTypeId")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsTagRelationship", OnColumns = $"{PrimaryKeyName}, {PropertyTypeIdName}, {TagIdName}")] + [ForeignKey(typeof(ContentDto), Name = "FK_cmsTagRelationship_cmsContent", Column = ContentDto.PrimaryKeyName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_tagId_nodeId", ForColumns = $"{TagIdName},{PrimaryKeyName}", IncludeColumns = PropertyTypeIdName)] public int NodeId { get; set; } - [Column("tagId")] + [Column(TagIdName)] [ForeignKey(typeof(TagDto))] public int TagId { get; set; } - [Column("propertyTypeId")] + [Column(PropertyTypeIdName)] [ForeignKey(typeof(PropertyTypeDto), Name = "FK_cmsTagRelationship_cmsPropertyType")] public int PropertyTypeId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs index 9ea63850dbaa..640889b27584 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs @@ -11,12 +11,14 @@ internal sealed class TemplateDto { public const string TableName = Constants.DatabaseSchema.Tables.Template; public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string ReferenceName = "NodeId"; [Column(PrimaryKeyName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column("nodeId")] + [Column(NodeIdName)] [Index(IndexTypes.UniqueNonClustered)] [ForeignKey(typeof(NodeDto), Name = "FK_cmsTemplate_umbracoNode")] public int NodeId { get; set; } @@ -27,6 +29,6 @@ internal sealed class TemplateDto public string? Alias { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "NodeId")] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceName)] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs index bb28f81bf95c..a7aedfff6bbf 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs @@ -11,13 +11,14 @@ public class User2ClientIdDto { public const string TableName = Constants.DatabaseSchema.Tables.User2ClientId; public const string PrimaryKeyName = "userId"; + public const string ClientIdName = "clientId"; [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyName}, clientId")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyName}, {ClientIdName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column("clientId")] + [Column(ClientIdName)] [Length(255)] public string? ClientId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs index 755ad1fa5340..dcea258fc85c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs @@ -11,13 +11,14 @@ public class UserGroup2AppDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2App; public const string PrimaryKeyName = "userGroupId"; // Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string AppAliasName = "app"; [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = "userGroupId, app")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = $"{PrimaryKeyName}, {AppAliasName}")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } - [Column("app")] + [Column(AppAliasName)] [Length(50)] public string AppAlias { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs index 81305f048493..d7fbfba8b502 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs @@ -9,14 +9,16 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class Webhook2HeadersDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook2Headers; + public const string KeyName = "Key"; public const string ValueName = "Value"; + public const string WebhookIdName = "WebhookId"; - [Column("webhookId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_headers2WebhookDto", OnColumns = "webhookId, key")] + [Column(WebhookIdName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_headers2WebhookDto", OnColumns = $"{WebhookIdName}, {KeyName}")] [ForeignKey(typeof(WebhookDto), OnDelete = Rule.Cascade)] public int WebhookId { get; set; } - [Column("key")] + [Column(KeyName)] public string Key { get; set; } = string.Empty; [Column(ValueName)] From 9bc68ddb46feae198b65efa12c31d91985ee4033 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Fri, 9 Jan 2026 14:52:29 +0100 Subject: [PATCH 07/20] fix test --- .../Persistence/Dtos/ContentVersionCultureVariationDto.cs | 2 +- src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs | 2 +- src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs index fa4614f57eee..9e601ba045c7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs @@ -23,7 +23,7 @@ internal sealed class ContentVersionCultureVariationDto public int Id { get; set; } [Column(VersionIdName)] - [ForeignKey(typeof(ContentVersionDto), Name = "FK_umbContentVersionCultureVariation_umbContentVersion_id")] // needs to be shorter than 64 chars for e.g. PostgreSQL! + [ForeignKey(typeof(ContentVersionDto))] [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{LanguageIdName}", IncludeColumns = $"{PrimaryKeyName},{NameName},{UpdateDateName},{UpdateUserIdName}")] public int VersionId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs index 8212b77041c6..a29cc3d890fa 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs @@ -12,7 +12,7 @@ public class LanguageTextDto public const string TableName = Constants.DatabaseSchema.Tables.DictionaryValue; public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; public const string LanguageIdName = "languageId"; - public const string UniqueIdName = Constants.DatabaseSchema.Columns.UniqueIdName; + public const string UniqueIdName = "UniqueId"; [Column(PrimaryKeyName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs index 5b1ca912b029..bf0e0d47a447 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs @@ -83,7 +83,7 @@ internal class PropertyTypeDto [Reference(ReferenceType.OneToOne, ColumnName = "DataTypeId")] public DataTypeDto DataTypeDto { get; set; } = null!; - [Column("uniqueId")] + [Column("UniqueId")] [NullSetting(NullSetting = NullSettings.NotNull)] [Constraint(Default = SystemMethods.NewGuid)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsPropertyTypeUniqueID")] From d2547efc1bc48c1cc016360b0d33d73cea005989 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Fri, 9 Jan 2026 21:04:11 +0100 Subject: [PATCH 08/20] fix review comments --- .../Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs | 2 +- .../Persistence/Dtos/PropertyTypeReadOnlyDto.cs | 4 ++-- .../Persistence/Dtos/UserGroup2AppDto.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs index fdbba9e8bc57..3dec84a6cc56 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs @@ -9,7 +9,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class PropertyTypeGroupReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; - public const string PrimaryKeyName = "PropertyTypeGroupId"; // there is an inconsistency in main branch between atributtes + public const string PrimaryKeyName = "PropertyTypeGroupId"; [Column(PrimaryKeyName)] public int? Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs index b609ab867cd7..5572efbf670b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs @@ -9,7 +9,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class PropertyTypeReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; - public const string PrimaryKeyName = "PropertyTypeId"; // there is an inconsistency in main branch between atributtes + public const string PrimaryKeyName = "PropertyTypeId"; [Column(PrimaryKeyName)] public int? Id { get; set; } @@ -67,6 +67,6 @@ internal sealed class PropertyTypeReadOnlyDto [Column("dbType")] public string? DbType { get; set; } - [Column("uniqueId")] + [Column("UniqueID")] public Guid UniqueId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs index dcea258fc85c..a2df9218e3ce 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class UserGroup2AppDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2App; - public const string PrimaryKeyName = "userGroupId"; // Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyName = "userGroupId"; public const string AppAliasName = "app"; [Column(PrimaryKeyName)] From 944e16d4309f84e76cc4a310cae606b1c6cac0c1 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Sat, 10 Jan 2026 10:39:23 +0100 Subject: [PATCH 09/20] fix database schema --- .../UmbracoDbContext.cs | 2 +- .../Persistence/Constants-DatabaseSchema.cs | 5 +-- .../Persistence/Dtos/AccessDto.cs | 6 ++-- .../Persistence/Dtos/AccessRuleDto.cs | 18 ++++++---- .../Persistence/Dtos/AuditEntryDto.cs | 6 ++-- .../Persistence/Dtos/CacheInstructionDto.cs | 6 ++-- .../Persistence/Dtos/ConsentDto.cs | 6 ++-- .../Persistence/Dtos/ContentDto.cs | 16 ++++----- .../Persistence/Dtos/ContentNuDto.cs | 24 +++++++------ .../Persistence/Dtos/ContentScheduleDto.cs | 6 ++-- .../Dtos/ContentType2ContentTypeDto.cs | 10 +++--- .../Dtos/ContentTypeAllowedContentTypeDto.cs | 20 ++++++----- .../Persistence/Dtos/ContentTypeDto.cs | 11 +++--- .../Dtos/ContentTypeTemplateDto.cs | 4 +-- .../Dtos/ContentVersionCleanupPolicyDto.cs | 2 +- .../Dtos/ContentVersionCultureVariationDto.cs | 19 ++++++----- .../Persistence/Dtos/ContentVersionDto.cs | 33 +++++++++++------- .../Dtos/CreatedPackageSchemaDto.cs | 12 ++++--- .../Persistence/Dtos/DataTypeDto.cs | 6 ++-- .../Persistence/Dtos/DictionaryDto.cs | 13 +++---- .../Persistence/Dtos/DistributedJobDto.cs | 6 ++-- .../Dtos/DocumentCultureVariationDto.cs | 15 ++++---- .../Persistence/Dtos/DocumentDto.cs | 6 ++-- .../Persistence/Dtos/DocumentUrlDto.cs | 27 +++++++++------ .../Persistence/Dtos/DocumentVersionDto.cs | 19 ++++++----- .../Persistence/Dtos/DomainDto.cs | 6 ++-- .../Persistence/Dtos/ExternalLoginDto.cs | 24 ++++++++----- .../Persistence/Dtos/ExternalLoginTokenDto.cs | 20 ++++++----- .../Persistence/Dtos/KeyValueDto.cs | 6 ++-- .../Persistence/Dtos/LanguageDto.cs | 6 ++-- .../Persistence/Dtos/LanguageTextDto.cs | 15 ++++---- .../Persistence/Dtos/LastSyncedDto.cs | 6 ++-- .../Persistence/Dtos/LockDto.cs | 6 ++-- .../Persistence/Dtos/LogDto.cs | 22 +++++++----- .../Persistence/Dtos/LogViewerQueryDto.cs | 6 ++-- .../Dtos/LongRunningOperationDto.cs | 6 ++-- .../Persistence/Dtos/MediaVersionDto.cs | 12 ++++--- .../Persistence/Dtos/Member2MemberGroupDto.cs | 11 +++--- .../Persistence/Dtos/MemberDto.cs | 10 +++--- .../Persistence/Dtos/MemberPropertyTypeDto.cs | 12 +++---- .../Persistence/Dtos/NodeDto.cs | 34 +++++++++++-------- .../Persistence/Dtos/PropertyDataDto.cs | 25 ++++++++------ .../Persistence/Dtos/PropertyTypeDto.cs | 22 ++++++------ .../Persistence/Dtos/PropertyTypeGroupDto.cs | 18 +++++----- .../Dtos/PropertyTypeGroupReadOnlyDto.cs | 6 ++-- .../Dtos/PropertyTypeReadOnlyDto.cs | 6 ++-- .../Persistence/Dtos/RedirectUrlDto.cs | 28 +++++++++------ .../Persistence/Dtos/RelationDto.cs | 18 ++++++---- .../Persistence/Dtos/RelationTypeDto.cs | 6 ++-- .../Dtos/RepositoryCacheVersionDto.cs | 6 ++-- .../Persistence/Dtos/ServerRegistrationDto.cs | 6 ++-- .../Persistence/Dtos/TagDto.cs | 20 ++++++----- .../Persistence/Dtos/TagRelationshipDto.cs | 20 +++++------ .../Persistence/Dtos/TemplateDto.cs | 13 ++++--- .../Persistence/Dtos/TwoFactorLoginDto.cs | 15 ++++---- .../Persistence/Dtos/User2ClientIdDto.cs | 11 +++--- .../Persistence/Dtos/User2NodeNotifyDto.cs | 12 +++---- .../Persistence/Dtos/User2UserGroupDto.cs | 9 +++-- .../Persistence/Dtos/UserDataDto.cs | 20 ++++++----- .../Persistence/Dtos/UserDto.cs | 9 ++--- .../Persistence/Dtos/UserGroup2AppDto.cs | 11 +++--- .../Dtos/UserGroup2GranularPermissionDto.cs | 14 ++++---- .../Persistence/Dtos/UserGroup2LanguageDto.cs | 9 +++-- .../Persistence/Dtos/UserGroup2NodeDto.cs | 9 +++-- .../Dtos/UserGroup2NodePermissionDto.cs | 12 ++++--- .../Dtos/UserGroup2PermissionDto.cs | 14 ++++---- .../Persistence/Dtos/UserGroupDto.cs | 6 ++-- .../Persistence/Dtos/UserLoginDto.cs | 6 ++-- .../Persistence/Dtos/UserStartNodeDto.cs | 18 ++++++---- .../Dtos/Webhook2ContentTypeKeysDto.cs | 11 +++--- .../Persistence/Dtos/Webhook2EventsDto.cs | 9 +++-- .../Persistence/Dtos/Webhook2HeadersDto.cs | 15 ++++---- .../Persistence/Dtos/WebhookDto.cs | 6 ++-- .../Persistence/Dtos/WebhookLogDto.cs | 6 ++-- .../Persistence/Dtos/WebhookRequestDto.cs | 6 ++-- 75 files changed, 515 insertions(+), 407 deletions(-) diff --git a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs index 793a3d675a50..ca69e31727d2 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs @@ -84,7 +84,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes()) { - entity.SetTableName(Core.Constants.DatabaseSchema.Tables.TableNamePrefix + entity.GetTableName()); + entity.SetTableName(Core.Constants.DatabaseSchema.TableNamePrefix + entity.GetTableName()); } } } diff --git a/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs b/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs index e359c70335c3..9ac02f409c2e 100644 --- a/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs +++ b/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs @@ -6,6 +6,9 @@ public static partial class Constants { public static class DatabaseSchema { + // TODO: Why aren't all table names with the same prefix? + public const string TableNamePrefix = "umbraco"; + public static class Columns { // Defines constants for common field names used throughout the database, to ensure @@ -19,8 +22,6 @@ public static class Columns public static class Tables { - // TODO: Why aren't all table names with the same prefix? - public const string TableNamePrefix = "umbraco"; public const string Lock = TableNamePrefix + "Lock"; public const string Log = TableNamePrefix + "Log"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs index 2d99f87ba056..9498b8d1c4d0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class AccessDto { public const string TableName = Constants.DatabaseSchema.Tables.Access; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoAccess", AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs index dd12fc334fbd..2ac8cb73b912 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs @@ -6,26 +6,30 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class AccessRuleDto { public const string TableName = Constants.DatabaseSchema.Tables.AccessRule; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string RuleValueName = "ruleValue"; + private const string RuleTypeName = "ruleType"; + private const string AssessIdName = "accessId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoAccessRule", AutoIncrement = false)] public Guid Id { get; set; } - [Column("accessId")] + [Column(AssessIdName)] [ForeignKey(typeof(AccessDto), Name = "FK_umbracoAccessRule_umbracoAccess_id")] public Guid AccessId { get; set; } - [Column("ruleValue")] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "ruleValue,ruleType,accessId", Name = "IX_umbracoAccessRule")] + [Column(RuleValueName)] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{RuleValueName},{RuleTypeName},{AssessIdName}", Name = "IX_umbracoAccessRule")] public string? RuleValue { get; set; } - [Column("ruleType")] + [Column(RuleTypeName)] public string? RuleType { get; set; } [Column("createDate")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs index d39dd8bba40f..0354fad8bf31 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class AuditEntryDto { public const string TableName = Constants.DatabaseSchema.Tables.AuditEntry; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs index fc4bef2a4cb7..6201df164d66 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class CacheInstructionDto { public const string TableName = Constants.DatabaseSchema.Tables.CacheInstruction; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [PrimaryKeyColumn(AutoIncrement = true, Name = "PK_umbracoCacheInstruction")] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs index 2da6a6db9750..e952064d26f0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class ConsentDto { public const string TableName = Constants.DatabaseSchema.Tables.Consent; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs index 49790c00ac27..2d3c4d63bf1f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs @@ -5,31 +5,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class ContentDto { public const string TableName = Constants.DatabaseSchema.Tables.Content; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string ContentTypeIdName = "contentTypeId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string ContentTypeIdColumnName = "contentTypeId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } - [Column(ContentTypeIdName)] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [Column(ContentTypeIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int ContentTypeId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = PrimaryKeyName)] + [Reference(ReferenceType.OneToOne, ColumnName = PrimaryKeyColumnName)] public NodeDto NodeDto { get; set; } = null!; // although a content has many content versions, // they can only be loaded one by one (as several content), // so this here is a OneToOne reference [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = PrimaryKeyName)] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = PrimaryKeyColumnName)] public ContentVersionDto ContentVersionDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs index 77468e8bb902..af08ac65f4e2 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs @@ -6,22 +6,24 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class ContentNuDto { public const string TableName = Constants.DatabaseSchema.Tables.NodeData; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string PublishedName = "published"; - public const string RvName = "rv"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsContentNu", OnColumns = $"{PrimaryKeyName}, {PublishedName}")] - [ForeignKey(typeof(ContentDto), Column = PrimaryKeyName, OnDelete = Rule.Cascade)] + private const string PublishedColumnName = "published"; + private const string RvColumnName = "rv"; + private const string DataRawColumnName = "dataRaw"; + + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsContentNu", OnColumns = $"{PrimaryKeyColumnName}, {PublishedColumnName}")] + [ForeignKey(typeof(ContentDto), Column = PrimaryKeyColumnName, OnDelete = Rule.Cascade)] public int NodeId { get; set; } - [Column(PublishedName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = $"{PublishedName},{PrimaryKeyName},{RvName}", IncludeColumns = "dataRaw")] + [Column(PublishedColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_" + PublishedColumnName, ForColumns = $"{PublishedColumnName},{PrimaryKeyColumnName},{RvColumnName}", IncludeColumns = DataRawColumnName)] public bool Published { get; set; } /// @@ -35,10 +37,10 @@ public class ContentNuDto [NullSetting(NullSetting = NullSettings.Null)] public string? Data { get; set; } - [Column(RvName)] + [Column(RvColumnName)] public long Rv { get; set; } - [Column("dataRaw")] + [Column(DataRawColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public byte[]? RawData { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs index a4ebdd56b17d..4291a7d1baf9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class ContentScheduleDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentSchedule; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs index 4c6fea5be1ba..06c96c67b10d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs @@ -9,15 +9,15 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ContentType2ContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentTypeTree; - public const string PrimaryKeyName = "parentContentTypeId"; - public const string ChildIdName = "childContentTypeId"; + public const string PrimaryKeyColumnName = "parentContentTypeId"; + public const string ChildIdColumnName = "childContentTypeId"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentType2ContentType", OnColumns = $"{PrimaryKeyName}, {ChildIdName}")] + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentType2ContentType", OnColumns = $"{PrimaryKeyColumnName}, {ChildIdColumnName}")] [ForeignKey(typeof(NodeDto), Name = "FK_cmsContentType2ContentType_umbracoNode_parent")] public int ParentId { get; set; } - [Column(ChildIdName)] + [Column(ChildIdColumnName)] [ForeignKey(typeof(NodeDto), Name = "FK_cmsContentType2ContentType_umbracoNode_child")] public int ChildId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs index a5d906298677..c367905956a0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs @@ -5,7 +5,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class ContentTypeAllowedContentTypeDto { @@ -13,20 +13,22 @@ internal sealed class ContentTypeAllowedContentTypeDto // ToDo: Here we have an incosistent column name in DatabaseSchema. It should be Constants.DatabaseSchema.Columns.PrimaryKeyNameId; ("id") // For now we leave the databse schema as is to avoid breaking changes. - public const string PrimaryKeyName = "Id"; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string AllowedIdName = "AllowedId"; + public const string PrimaryKeyColumnName = "Id"; + public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string SortOrderColumnName = "SortOrder"; - [Column(PrimaryKeyName)] - [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = NodeIdName)] - [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = $"{PrimaryKeyName}, {AllowedIdName}")] + private const string AllowedIdName = "AllowedId"; + + [Column(PrimaryKeyColumnName)] + [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = NodeIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = $"{PrimaryKeyColumnName}, {AllowedIdName}")] public int Id { get; set; } [Column(AllowedIdName)] - [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = NodeIdName)] + [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = NodeIdColumnName)] public int AllowedId { get; set; } - [Column("SortOrder")] + [Column(SortOrderColumnName)] [Constraint(Name = "df_cmsContentTypeAllowedContentType_sortOrder", Default = "0")] public int SortOrder { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs index d30877eabfe9..18d1476f05db 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs @@ -5,23 +5,24 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal class ContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + private string? _alias; // Public constants to bind properties between DTOs public const string VariationsColumnName = "variations"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 700)] public int PrimaryKey { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsContentType")] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs index ef03626eed5c..e226a8ee7928 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs @@ -15,12 +15,12 @@ internal sealed class ContentTypeTemplateDto [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsDocumentType", OnColumns = $"{PrimaryKeyName}, {TemplateNodeIdName}")] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] public int ContentTypeNodeId { get; set; } [Column(TemplateNodeIdName)] - [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdName)] + [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdColumnName)] public int TemplateNodeId { get; set; } [Column("IsDefault")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs index c5db02bd7728..4ddd6386951e 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs @@ -14,7 +14,7 @@ internal sealed class ContentVersionCleanupPolicyDto [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoContentVersionCleanupPolicy")] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int ContentTypeId { get; set; } [Column("preventCleanup")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs index 9e601ba045c7..6e85c2486494 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs @@ -5,26 +5,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class ContentVersionCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersionCultureVariation; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string LanguageIdName = "languageId"; - public const string VersionIdName = "versionId"; - public const string UpdateUserIdName = "availableUserId"; - public const string UpdateDateName = "date"; - public const string NameName = "name"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + + private const string LanguageIdName = "languageId"; + private const string VersionIdName = "versionId"; + private const string UpdateUserIdName = "availableUserId"; + private const string UpdateDateName = "date"; + private const string NameName = "name"; private int? _updateUserId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } [Column(VersionIdName)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{LanguageIdName}", IncludeColumns = $"{PrimaryKeyName},{NameName},{UpdateDateName},{UpdateUserIdName}")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{LanguageIdName}", IncludeColumns = $"{PrimaryKeyColumnName},{NameName},{UpdateDateName},{UpdateUserIdName}")] public int VersionId { get; set; } [Column(LanguageIdName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs index f95fece8a755..e358a7b75600 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs @@ -6,34 +6,43 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class ContentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + + private const string UserIdColumnName = "userId"; + private const string VersionDateColumnName = "versionDate"; + private const string CurrentColumnName = "current"; + private const string TextColumnName = "text"; + private const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + private const string PreventCleanupColumnName = "preventCleanup"; + private const string ReferenceColumnName = "NodeId"; + private int? _userId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("nodeId")] + [Column(NodeIdColumnName)] [ForeignKey(typeof(ContentDto))] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = "nodeId,current", IncludeColumns = "id,versionDate,text,userId,preventCleanup")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = $"{NodeIdColumnName},{CurrentColumnName}", IncludeColumns = $"{PrimaryKeyColumnName},{VersionDateColumnName},{TextColumnName},{UserIdColumnName},{PreventCleanupColumnName}")] public int NodeId { get; set; } - [Column("versionDate")] // TODO: db rename to 'updateDate' + [Column(VersionDateColumnName)] // TODO: db rename to 'updateDate' [Constraint(Default = SystemMethods.CurrentUTCDateTime)] public DateTime VersionDate { get; set; } - [Column("userId")] // TODO: db rename to 'updateUserId' + [Column(UserIdColumnName)] // TODO: db rename to 'updateUserId' [ForeignKey(typeof(UserDto))] [NullSetting(NullSetting = NullSettings.Null)] public int? UserId { get => _userId == 0 ? null : _userId; set => _userId = value; } // return null if zero - [Column("current")] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Current", IncludeColumns = "nodeId")] + [Column(CurrentColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Current", IncludeColumns = NodeIdColumnName)] public bool Current { get; set; } // about current: @@ -42,15 +51,15 @@ public class ContentVersionDto // we could use a content.currentVersionId FK that would need to be nullable, or (better?) an additional table // linking a content itemt to its current version (nodeId, versionId) - that would guarantee uniqueness BUT it would // not guarantee existence - so, really... we are trusting our code to manage 'current' correctly. - [Column("text")] + [Column(TextColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Text { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "NodeId", ReferenceMemberName = "NodeId")] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName, ReferenceMemberName = ReferenceColumnName)] public ContentDto? ContentDto { get; set; } - [Column("preventCleanup")] + [Column(PreventCleanupColumnName)] [Constraint(Default = "0")] public bool PreventCleanup { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs index c8b5ecf2e0c9..041c189e8291 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs @@ -7,20 +7,22 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] public class CreatedPackageSchemaDto { public const string TableName = Constants.DatabaseSchema.Tables.CreatedPackageSchema; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string NameColumnName = "name"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("name")] + [Column(NameColumnName)] [Length(255)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "name", Name = "IX_" + TableName + "_Name")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = NameColumnName, Name = "IX_" + TableName + "_Name")] public string Name { get; set; } = null!; [Column("value")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs index 199f01ac1a44..6c840b808f89 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class DataTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.DataType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs index 16d160fd9a26..8e020ddfb5a0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs @@ -5,20 +5,21 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class DictionaryDto // public as required to be accessible from Deploy for the RepairDictionaryIdsWorkItem. { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryEntry; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string ReferenceName = "UniqueId"; - public const string UniqueIdName = "id"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string UniqueIdColumnName = "id"; - [Column(PrimaryKeyName)] + private const string ReferenceName = "UniqueId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column(UniqueIdName)] + [Column(UniqueIdColumnName)] [Index(IndexTypes.UniqueNonClustered)] public Guid UniqueId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs index 2f263dff4724..38e44b0923b6 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class DistributedJobDto { public const string TableName = Constants.DatabaseSchema.Tables.DistributedJob; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs index 3d60598eb68b..2b9781c747f6 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs @@ -5,26 +5,29 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class DocumentCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentCultureVariation; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; - [Column(PrimaryKeyName)] + private const string LanguageIdName = "languageId"; + private const string NodeIdName = "nodeId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("nodeId")] + [Column(NodeIdName)] [ForeignKey(typeof(NodeDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = "nodeId,languageId")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = $"{NodeIdName},{LanguageIdName}")] public int NodeId { get; set; } - [Column("languageId")] + [Column(LanguageIdName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] public int LanguageId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs index 5bda35ad2e34..5da45a916a45 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs @@ -5,18 +5,18 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class DocumentDto { public const string TableName = Constants.DatabaseSchema.Tables.Document; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs index 18626f7990a1..1b0bc59f608f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs @@ -6,34 +6,39 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class DocumentUrlDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentUrl; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - - [Column(PrimaryKeyName)] + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string UniqueIdColumnName = "uniqueId"; + public const string IsDraftColumnName = "isDraft"; + public const string LanguageIdColumnName = "languageId"; + public const string UrlSegmentColumnName = "urlSegment"; + public const string IsPrimaryColumnName = "isPrimary"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Clustered = false, AutoIncrement = true)] public int NodeId { get; set; } - [Index(IndexTypes.UniqueClustered, ForColumns = "uniqueId, languageId, isDraft, urlSegment", Name = "IX_" + TableName)] - [Column("uniqueId")] - [ForeignKey(typeof(NodeDto), Column = "uniqueId")] + [Index(IndexTypes.UniqueClustered, ForColumns = $"{UniqueIdColumnName}, {LanguageIdColumnName}, {IsDraftColumnName}, {UrlSegmentColumnName}", Name = "IX_" + TableName)] + [Column(UniqueIdColumnName)] + [ForeignKey(typeof(NodeDto), Column = NodeDto.KeyColumnName)] public Guid UniqueId { get; set; } - [Column("isDraft")] + [Column(IsDraftColumnName)] public bool IsDraft { get; set; } - [Column("languageId")] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto))] public int LanguageId { get; set; } - [Column("urlSegment")] + [Column(UrlSegmentColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] public string UrlSegment { get; set; } = string.Empty; - [Column("isPrimary")] + [Column(IsPrimaryColumnName)] [Constraint(Default = 1)] public bool IsPrimary { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs index f779463227aa..ef4992d7081c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs @@ -5,28 +5,29 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class DocumentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string PublishedName = "published"; - public const string TemplateIdName = "templateId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PublishedColumnName = "published"; - [Column(PrimaryKeyName)] + private const string TemplateIdName = "templateId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = $"{PrimaryKeyName},{PublishedName}", IncludeColumns = TemplateIdName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = $"{PrimaryKeyColumnName},{PublishedColumnName}", IncludeColumns = TemplateIdName)] public int Id { get; set; } [Column(TemplateIdName)] [NullSetting(NullSetting = NullSettings.Null)] - [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdName)] + [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdColumnName)] public int? TemplateId { get; set; } - [Column(PublishedName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = PublishedName, IncludeColumns = $"{PrimaryKeyName},{TemplateIdName}")] + [Column(PublishedColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = PublishedColumnName, IncludeColumns = $"{PrimaryKeyColumnName},{TemplateIdName}")] public bool Published { get; set; } [ResultColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs index b2a87a4f21b3..36b27a68134b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class DomainDto { public const string TableName = Constants.DatabaseSchema.Tables.Domain; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs index c0d5b538e84f..a1d045e94c98 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs @@ -7,40 +7,46 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] internal sealed class ExternalLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.ExternalLogin; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string UserIdColumnName = "userId"; + private const string UserOrMemberKeyColumnName = "userOrMemberKey"; + private const string LoginProviderColumnName = "loginProvider"; + private const string ProviderKeyColumnName = "providerKey"; + + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } [Obsolete("This only exists to ensure you can upgrade using external logins from umbraco version where this was used to the new where it is not used")] - [ResultColumn("userId")] + [ResultColumn(UserIdColumnName)] public int? UserId { get; set; } - [Column("userOrMemberKey")] + [Column(UserOrMemberKeyColumnName)] [Index(IndexTypes.NonClustered)] public Guid UserOrMemberKey { get; set; } /// /// Used to store the name of the provider (i.e. Facebook, Google) /// - [Column("loginProvider")] + [Column(LoginProviderColumnName)] [Length(400)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "loginProvider,userOrMemberKey", Name = "IX_" + TableName + "_LoginProvider")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{LoginProviderColumnName},{UserOrMemberKeyColumnName}", Name = "IX_" + TableName + "_LoginProvider")] public string LoginProvider { get; set; } = null!; /// /// Stores the key the provider uses to lookup the login /// - [Column("providerKey")] + [Column(ProviderKeyColumnName)] [Length(4000)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.NonClustered, ForColumns = "loginProvider,providerKey", Name = "IX_" + TableName + "_ProviderKey")] + [Index(IndexTypes.NonClustered, ForColumns = $"{LoginProviderColumnName},{ProviderKeyColumnName}", Name = "IX_" + TableName + "_ProviderKey")] public string ProviderKey { get; set; } = null!; [Column("createDate")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs index ab7e3a5d5afd..acabe5623fb1 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs @@ -7,24 +7,28 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] internal sealed class ExternalLoginTokenDto { public const string TableName = Constants.DatabaseSchema.Tables.ExternalLoginToken; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string ExternalLoginIdColumnName = "externalLoginId"; + private const string NameColumnName = "name"; + private const string ReferenceColumnName = "ExternalLoginId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("externalLoginId")] - [ForeignKey(typeof(ExternalLoginDto), Column = "id")] + [Column(ExternalLoginIdColumnName)] + [ForeignKey(typeof(ExternalLoginDto), Column = ExternalLoginDto.PrimaryKeyColumnName)] public int ExternalLoginId { get; set; } - [Column("name")] + [Column(NameColumnName)] [Length(255)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "externalLoginId,name", Name = "IX_" + TableName + "_Name")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{ExternalLoginIdColumnName},{NameColumnName}", Name = "IX_" + TableName + "_Name")] public string Name { get; set; } = null!; [Column("value")] @@ -37,6 +41,6 @@ internal sealed class ExternalLoginTokenDto public DateTime CreateDate { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "ExternalLoginId")] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public ExternalLoginDto ExternalLoginDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs index 483c7de0a81d..be3ae145d4e5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs @@ -7,14 +7,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class KeyValueDto { public const string TableName = Constants.DatabaseSchema.Tables.KeyValue; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [Length(256)] [PrimaryKeyColumn(AutoIncrement = false, Clustered = true)] public string Key { get; set; } = null!; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs index 5fdcbbfa1724..d655187b00fe 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs @@ -5,12 +5,12 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class LanguageDto { public const string TableName = Constants.DatabaseSchema.Tables.Language; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; // Public constants to bind properties between DTOs public const string IsoCodeColumnName = "languageISOCode"; @@ -18,7 +18,7 @@ internal sealed class LanguageDto /// /// Gets or sets the identifier of the language. /// - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 2)] public short Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs index a29cc3d890fa..3038b61473ff 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs @@ -5,26 +5,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class LanguageTextDto { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryValue; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string LanguageIdName = "languageId"; - public const string UniqueIdName = "UniqueId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - [Column(PrimaryKeyName)] + private const string LanguageIdName = "languageId"; + private const string UniqueIdName = "UniqueId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } [Column(LanguageIdName)] - [ForeignKey(typeof(LanguageDto), Column = LanguageDto.PrimaryKeyName)] + [ForeignKey(typeof(LanguageDto), Column = LanguageDto.PrimaryKeyColumnName)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_languageId", ForColumns = $"{LanguageIdName},{UniqueIdName}")] public int LanguageId { get; set; } [Column(UniqueIdName)] - [ForeignKey(typeof(DictionaryDto), Column = DictionaryDto.UniqueIdName)] + [ForeignKey(typeof(DictionaryDto), Column = DictionaryDto.UniqueIdColumnName)] public Guid UniqueId { get; set; } [Column("value")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs index 47298aa2885b..74c4c2dae402 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class LastSyncedDto { internal const string TableName = Constants.DatabaseSchema.Tables.LastSynced; - public const string PrimaryKeyName = "machineId"; + public const string PrimaryKeyColumnName = "machineId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_lastSyncedMachineId", AutoIncrement = false, Clustered = true)] public required string MachineId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs index 3fadbbfba5c7..27f25091834a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class LockDto { public const string TableName = Constants.DatabaseSchema.Tables.Lock; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoLock", AutoIncrement = false)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs index 9a8a18bc7b4e..c0b56fcf30f9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs @@ -6,25 +6,29 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class LogDto { public const string TableName = Constants.DatabaseSchema.Tables.Log; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + private const string UserIdColumnName = "userId"; + private const string NodeIdColumnName = "NodeId"; + private const string DatestampColumnName = "Datestamp"; + private const string HeaderColumnName = "logHeader"; private int? _userId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("userId")] + [Column(UserIdColumnName)] [ForeignKey(typeof(UserDto))] [NullSetting(NullSetting = NullSettings.Null)] public int? UserId { get => _userId == 0 ? null : _userId; set => _userId = value; } // return null if zero - [Column("NodeId")] + [Column(NodeIdColumnName)] [Index(IndexTypes.NonClustered, Name = "IX_umbracoLog")] public int NodeId { get; set; } @@ -36,14 +40,14 @@ internal sealed class LogDto [NullSetting(NullSetting = NullSettings.Null)] public string? EntityType { get; set; } - [Column("Datestamp")] + [Column(DatestampColumnName)] [Constraint(Default = SystemMethods.CurrentUTCDateTime)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_datestamp", ForColumns = "Datestamp,userId,NodeId")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_datestamp", ForColumns = $"{DatestampColumnName},{UserIdColumnName},{NodeIdColumnName}")] public DateTime Datestamp { get; set; } - [Column("logHeader")] + [Column(HeaderColumnName)] [Length(50)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_datestamp_logheader", ForColumns = "Datestamp,logHeader")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_datestamp_logheader", ForColumns = $"{DatestampColumnName},{HeaderColumnName}")] public string Header { get; set; } = null!; [Column("logComment")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs index 31c90765530c..b531201e02cd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class LogViewerQueryDto { public const string TableName = Constants.DatabaseSchema.Tables.LogViewerQuery; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs index 9d1baa939a0e..42ae25c94706 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal class LongRunningOperationDto { public const string TableName = Constants.DatabaseSchema.Tables.LongRunningOperation; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoLongRunningOperation", AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs index 629d8e2fc294..247e234025aa 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs @@ -5,20 +5,22 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class MediaVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.MediaVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string PathColumnName = "path"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName, ForColumns = "id, path")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName, ForColumns = $"{PrimaryKeyColumnName}, {PathColumnName}")] public int Id { get; set; } - [Column("path")] + [Column(PathColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Path { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs index 957e3b148b29..576c35400828 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs @@ -5,16 +5,17 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class Member2MemberGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.Member2MemberGroup; - public const string PrimaryKeyName = "Member"; - public const string MemberGroupName = "MemberGroup"; + public const string PrimaryKeyColumnName = "Member"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyName}, {MemberGroupName}")] + private const string MemberGroupName = "MemberGroup"; + + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyColumnName}, {MemberGroupName}")] [ForeignKey(typeof(MemberDto))] public int Member { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs index ac92c951ae2f..f141fe6643c4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class MemberDto { private const string TableName = Constants.DatabaseSchema.Tables.Member; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentDto))] public int NodeId { get; set; } @@ -76,10 +76,10 @@ internal sealed class MemberDto public DateTime? LastPasswordChangeDate { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = "NodeId")] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentDto.NodeId))] public ContentDto ContentDto { get; set; } = null!; [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = "NodeId")] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentVersionDto.NodeId))] public ContentVersionDto ContentVersionDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs index 99aa11c864c9..be9a65f7be23 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs @@ -5,21 +5,21 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class MemberPropertyTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.MemberPropertyType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string NodeIdColumnName = "NodeId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] - [ForeignKey(typeof(ContentTypeDto), Column = NodeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int NodeId { get; set; } [Column("propertytypeId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs index aae44b90491c..4b1e1a3c461c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs @@ -6,22 +6,28 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class NodeDto { public const string TableName = Constants.DatabaseSchema.Tables.Node; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const int NodeIdSeed = 1060; // Public constants to bind properties between DTOs - public const string IdColumnName = PrimaryKeyName; + public const string IdColumnName = PrimaryKeyColumnName; public const string KeyColumnName = Constants.DatabaseSchema.Columns.UniqueIdName; public const string ParentIdColumnName = "parentId"; public const string SortOrderColumnName = "sortOrder"; public const string TrashedColumnName = "trashed"; public const string NodeObjectTypeColumnName = "nodeObjectType"; public const string TextColumnName = "text"; + public const string PathColumnName = "path"; + public const string LevelColumnName = "level"; + public const string UserIdColumnName = "nodeUser"; + public const string CreateDateColumnName = "createDate"; + public const string UniqueIdColumnNameTypo = "uniqueID"; + private int? _userId; @@ -31,27 +37,27 @@ public class NodeDto [Column(KeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_UniqueId", IncludeColumns = "parentId,level,path,sortOrder,trashed,nodeUser,text,createDate")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_UniqueId", IncludeColumns = $"{ParentIdColumnName},{LevelColumnName},{PathColumnName},{SortOrderColumnName},{TrashedColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] [Constraint(Default = SystemMethods.NewGuid)] public Guid UniqueId { get; set; } [Column(ParentIdColumnName)] [ForeignKey(typeof(NodeDto))] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_parentId_nodeObjectType", ForColumns = "parentId,nodeObjectType", IncludeColumns = "trashed,nodeUser,level,path,sortOrder,uniqueID,text,createDate")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_parentId_nodeObjectType", ForColumns = $"{ParentIdColumnName},{NodeObjectTypeColumnName}", IncludeColumns = $"{TrashedColumnName},{UserIdColumnName},{LevelColumnName},{PathColumnName},{SortOrderColumnName},{UniqueIdColumnNameTypo},{TextColumnName},{CreateDateColumnName}")] public int ParentId { get; set; } // NOTE: This index is primarily for the nucache data lookup, see https://github.com/umbraco/Umbraco-CMS/pull/8365#issuecomment-673404177 - [Column("level")] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Level", ForColumns = "level,parentId,sortOrder,nodeObjectType,trashed", IncludeColumns = "nodeUser,path,uniqueId,createDate")] + [Column(LevelColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Level", ForColumns = $"{LevelColumnName},{ParentIdColumnName},{SortOrderColumnName},{NodeObjectTypeColumnName},{TrashedColumnName}", IncludeColumns = $"{UserIdColumnName},{PathColumnName},{KeyColumnName},{CreateDateColumnName}")] public short Level { get; set; } - [Column("path")] + [Column(PathColumnName)] [Length(150)] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Path")] public string Path { get; set; } = null!; [Column(SortOrderColumnName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType_trashed_sorted", ForColumns = "nodeObjectType,trashed,sortOrder,id", IncludeColumns = "uniqueID,parentId,level,path,nodeUser,text,createDate")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType_trashed_sorted", ForColumns = $"{NodeObjectTypeColumnName},{TrashedColumnName},{SortOrderColumnName},{IdColumnName}", IncludeColumns = $"{UniqueIdColumnNameTypo},{ParentIdColumnName},{LevelColumnName},{PathColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] public int SortOrder { get; set; } [Column(TrashedColumnName)] @@ -59,21 +65,21 @@ public class NodeDto [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Trashed")] public bool Trashed { get; set; } - [Column("nodeUser")] // TODO: db rename to 'createUserId' + [Column(UserIdColumnName)] // TODO: db rename to 'createUserId' [ForeignKey(typeof(UserDto))] [NullSetting(NullSetting = NullSettings.Null)] public int? UserId { get => _userId == 0 ? null : _userId; set => _userId = value; } // return null if zero - [Column("text")] + [Column(TextColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Text { get; set; } - [Column("nodeObjectType")] // TODO: db rename to 'objectType' + [Column(NodeObjectTypeColumnName)] // TODO: db rename to 'objectType' [NullSetting(NullSetting = NullSettings.Null)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType", ForColumns = "nodeObjectType,trashed", IncludeColumns = "uniqueId,parentId,level,path,sortOrder,nodeUser,text,createDate")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType", ForColumns = $"{NodeObjectTypeColumnName},{TrashedColumnName}", IncludeColumns = $"{UniqueIdColumnNameTypo},{ParentIdColumnName},{LevelColumnName},{PathColumnName},{SortOrderColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] public Guid? NodeObjectType { get; set; } - [Column("createDate")] + [Column(CreateDateColumnName)] [Constraint(Default = SystemMethods.CurrentUTCDateTime)] public DateTime CreateDate { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs index 123d8141ea39..f5c8634e449c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs @@ -6,41 +6,44 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class PropertyDataDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyData; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string PropertyTypeIdName = "propertyTypeId"; - public const string VersionIdName = "versionId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PropertyTypeIdColumnName = "propertyTypeId"; + public const string VersionIdColumnName = "versionId"; public const int VarcharLength = 512; public const int SegmentLength = 256; + private const string LanguageIdColumnName = "languageId"; + private const string SegmentColumnName = "segment"; + private const string ReferenceColumnName = "PropertyTypeId"; // differs in casing from PropertyTypeIdColumnName! private decimal? _decimalValue; // pk, not used at the moment (never updating) - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column(VersionIdName)] + [Column(VersionIdColumnName)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{PropertyTypeIdName},languageId,segment")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdColumnName},{PropertyTypeIdColumnName},{LanguageIdColumnName},{SegmentColumnName}")] public int VersionId { get; set; } - [Column(PropertyTypeIdName)] + [Column(PropertyTypeIdColumnName)] [ForeignKey(typeof(PropertyTypeDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_PropertyTypeId")] public int PropertyTypeId { get; set; } - [Column("languageId")] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] [NullSetting(NullSetting = NullSettings.Null)] public int? LanguageId { get; set; } - [Column("segment")] + [Column(SegmentColumnName)] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Segment")] [NullSetting(NullSetting = NullSettings.Null)] [Length(SegmentLength)] @@ -73,7 +76,7 @@ public decimal? DecimalValue public string? TextValue { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "PropertyTypeId")] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public PropertyTypeDto? PropertyTypeDto { get; set; } [Ignore] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs index bf0e0d47a447..7935d4606721 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs @@ -6,31 +6,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal class PropertyTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string DataTypeIdName = "dataTypeId"; - public const string ContentTypeIdName = "contentTypeId"; - public const string PropertyTypeGroupIdName = "propertyTypeGroupId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PropertyTypeGroupIdColumnName = "propertyTypeGroupId"; + public const string DataTypeIdColumnName = "dataTypeId"; + public const string ContentTypeIdColumnName = "contentTypeId"; private string? _alias; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 100)] public int Id { get; set; } - [Column(DataTypeIdName)] - [ForeignKey(typeof(DataTypeDto), Column = DataTypeDto.PrimaryKeyName)] + [Column(DataTypeIdColumnName)] + [ForeignKey(typeof(DataTypeDto), Column = DataTypeDto.PrimaryKeyColumnName)] public int DataTypeId { get; set; } - [Column(ContentTypeIdName)] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [Column(ContentTypeIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int ContentTypeId { get; set; } - [Column(PropertyTypeGroupIdName)] + [Column(PropertyTypeGroupIdColumnName)] [NullSetting(NullSetting = NullSettings.Null)] [ForeignKey(typeof(PropertyTypeGroupDto))] public int? PropertyTypeGroupId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs index e27019533120..a9f565b4918b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs @@ -6,27 +6,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class PropertyTypeGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string ContentTypeNodeIdName = "contenttypeNodeId"; - public const string UniqueIdName = "uniqueID"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string ContentTypeNodeIdColumnName = "contenttypeNodeId"; + public const string UniqueIdColumnName = "uniqueID"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 56)] public int Id { get; set; } - [Column(UniqueIdName)] + [Column(UniqueIdColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [Constraint(Default = SystemMethods.NewGuid)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsPropertyTypeGroupUniqueID")] public Guid UniqueId { get; set; } - [Column(ContentTypeNodeIdName)] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [Column(ContentTypeNodeIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int ContentTypeNodeId { get; set; } [Column("type")] @@ -43,6 +43,6 @@ internal sealed class PropertyTypeGroupDto public int SortOrder { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.PropertyTypeGroupIdName)] + [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.PropertyTypeGroupIdColumnName)] public List PropertyTypeDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs index 3dec84a6cc56..8845301e4b34 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs @@ -4,14 +4,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class PropertyTypeGroupReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; - public const string PrimaryKeyName = "PropertyTypeGroupId"; + public const string PrimaryKeyColumnName = "PropertyTypeGroupId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] public int? Id { get; set; } [Column("PropertyGroupName")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs index 5572efbf670b..842d4d9789ff 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs @@ -4,14 +4,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class PropertyTypeReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; - public const string PrimaryKeyName = "PropertyTypeId"; + public const string PrimaryKeyColumnName = "PropertyTypeId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] public int? Id { get; set; } [Column("dataTypeId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs index 1ae602dca9f7..d9b8023b238a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs @@ -5,12 +5,18 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class RedirectUrlDto { public const string TableName = Constants.DatabaseSchema.Tables.RedirectUrl; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + + private const string ContentKeyName = "contentKey"; + private const string CreateDateUtcName = "createDateUtc"; + private const string UrlName = "url"; + private const string CultureName = "culture"; + private const string UrlHashName = "urlHash"; public RedirectUrlDto() => CreateDateUtc = DateTime.UtcNow; @@ -20,35 +26,35 @@ internal sealed class RedirectUrlDto // problem is that the index key must be 900 bytes max. should we run without an index? done // some perfs comparisons, and running with an index on a hash is only slightly slower on // inserts, and much faster on reads, so... we have an index on a hash. - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoRedirectUrl", AutoIncrement = false)] public Guid Id { get; set; } [ResultColumn] public int ContentId { get; set; } - [Column("contentKey")] + [Column(ContentKeyName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [ForeignKey(typeof(NodeDto), Column = "uniqueId")] + [ForeignKey(typeof(NodeDto), Column = NodeDto.KeyColumnName)] public Guid ContentKey { get; set; } - [Column("createDateUtc")] + [Column(CreateDateUtcName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_culture_hash", ForColumns = "createDateUtc", IncludeColumns = "culture,url,urlHash,contentKey")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_culture_hash", ForColumns = CreateDateUtcName, IncludeColumns = $"{CultureName},{UrlName},{UrlHashName},{ContentKeyName}")] public DateTime CreateDateUtc { get; set; } - [Column("url")] + [Column(UrlName)] [NullSetting(NullSetting = NullSettings.NotNull)] [SpecialDbType(SpecialDbTypes.NVARCHARMAX)] public string Url { get; set; } = null!; - [Column("culture")] + [Column(CultureName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Culture { get; set; } - [Column("urlHash")] + [Column(UrlHashName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRedirectUrl", ForColumns = "urlHash, contentKey, culture, createDateUtc")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRedirectUrl", ForColumns = $"{UrlHashName}, {ContentKeyName}, {CultureName}, {CreateDateUtcName}")] [Length(40)] public string UrlHash { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs index c871dce6db93..b14c249d9271 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs @@ -6,27 +6,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class RelationDto { public const string TableName = Constants.DatabaseSchema.Tables.Relation; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string RelationTypeColumnName = "relType"; + private const string ParentIdColumnName = "parentId"; + private const string ChildIdColumnName = "childId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("parentId")] + [Column(ParentIdColumnName)] [ForeignKey(typeof(NodeDto), Name = "FK_umbracoRelation_umbracoNode")] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRelation_parentChildType", ForColumns = "parentId,childId,relType")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRelation_parentChildType", ForColumns = $"{ParentIdColumnName},{ChildIdColumnName},{RelationTypeColumnName}")] public int ParentId { get; set; } - [Column("childId")] + [Column(ChildIdColumnName)] [ForeignKey(typeof(NodeDto), Name = "FK_umbracoRelation_umbracoNode1")] public int ChildId { get; set; } - [Column("relType")] + [Column(RelationTypeColumnName)] [ForeignKey(typeof(RelationTypeDto))] public int RelationType { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs index c62c0877cdc3..16dc1af1fe28 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs @@ -5,16 +5,16 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class RelationTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.RelationType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const int NodeIdSeed = 10; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = NodeIdSeed)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs index d1b973f2a2b7..f83965511981 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class RepositoryCacheVersionDto { internal const string TableName = Constants.DatabaseSchema.Tables.RepositoryCacheVersion; - public const string PrimaryKeyName = "identifier"; + public const string PrimaryKeyColumnName = "identifier"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [Length(256)] [PrimaryKeyColumn(Name = "PK_umbracoRepositoryCacheVersion", AutoIncrement = false, Clustered = true)] public required string Identifier { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs index 99907652a085..7d37c68a9045 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class ServerRegistrationDto { public const string TableName = Constants.DatabaseSchema.Tables.Server; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs index 42b605ce91db..5f037fd292db 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs @@ -5,31 +5,35 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class TagDto { public const string TableName = Constants.DatabaseSchema.Tables.Tag; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string LanguageIdColumnName = "languageId"; + private const string GroupColumnName = "group"; + private const string TextColumnName = "tag"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("group")] + [Column(GroupColumnName)] [Length(100)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_languageId_group", ForColumns = "languageId,group", IncludeColumns = "id,tag")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_languageId_group", ForColumns = $"{LanguageIdColumnName},{GroupColumnName}", IncludeColumns = $"{PrimaryKeyColumnName},{TextColumnName}")] public string Group { get; set; } = null!; - [Column("languageId")] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] [NullSetting(NullSetting = NullSettings.Null)] public int? LanguageId { get; set; } - [Column("tag")] + [Column(TextColumnName)] [Length(200)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "group,tag,languageId", Name = "IX_cmsTags")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{GroupColumnName},{TextColumnName},{LanguageIdColumnName}", Name = "IX_cmsTags")] public string Text { get; set; } = null!; // [Column("key")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs index c6d25795f296..1d1e7a5892e4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs @@ -5,26 +5,26 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class TagRelationshipDto { public const string TableName = Constants.DatabaseSchema.Tables.TagRelationship; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string PropertyTypeIdName = "propertyTypeId"; - public const string TagIdName = "tagId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PropertyTypeIdColumnName = "propertyTypeId"; + public const string TagIdColumnName = "tagId"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsTagRelationship", OnColumns = $"{PrimaryKeyName}, {PropertyTypeIdName}, {TagIdName}")] - [ForeignKey(typeof(ContentDto), Name = "FK_cmsTagRelationship_cmsContent", Column = ContentDto.PrimaryKeyName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_tagId_nodeId", ForColumns = $"{TagIdName},{PrimaryKeyName}", IncludeColumns = PropertyTypeIdName)] + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsTagRelationship", OnColumns = $"{PrimaryKeyColumnName}, {PropertyTypeIdColumnName}, {TagIdColumnName}")] + [ForeignKey(typeof(ContentDto), Name = "FK_cmsTagRelationship_cmsContent", Column = ContentDto.PrimaryKeyColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_tagId_nodeId", ForColumns = $"{TagIdColumnName},{PrimaryKeyColumnName}", IncludeColumns = PropertyTypeIdColumnName)] public int NodeId { get; set; } - [Column(TagIdName)] + [Column(TagIdColumnName)] [ForeignKey(typeof(TagDto))] public int TagId { get; set; } - [Column(PropertyTypeIdName)] + [Column(PropertyTypeIdColumnName)] [ForeignKey(typeof(PropertyTypeDto), Name = "FK_cmsTagRelationship_cmsPropertyType")] public int PropertyTypeId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs index 640889b27584..d17f37b1b643 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs @@ -5,20 +5,19 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class TemplateDto { public const string TableName = Constants.DatabaseSchema.Tables.Template; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string ReferenceName = "NodeId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [Index(IndexTypes.UniqueNonClustered)] [ForeignKey(typeof(NodeDto), Name = "FK_cmsTemplate_umbracoNode")] public int NodeId { get; set; } @@ -29,6 +28,6 @@ internal sealed class TemplateDto public string? Alias { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = ReferenceName)] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(NodeDto.NodeId))] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs index 2c67f410f83f..cb7985697117 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs @@ -6,24 +6,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] internal sealed class TwoFactorLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.TwoFactorLogin; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string UserOrMemberKeyColumnName = "userOrMemberKey"; + private const string ProviderNameColumnName = "providerName"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("userOrMemberKey")] + [Column(UserOrMemberKeyColumnName)] [Index(IndexTypes.NonClustered)] public Guid UserOrMemberKey { get; set; } - [Column("providerName")] + [Column(ProviderNameColumnName)] [Length(400)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "providerName,userOrMemberKey", Name = "IX_" + TableName + "_ProviderName")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{ProviderNameColumnName},{UserOrMemberKeyColumnName}", Name = "IX_" + TableName + "_ProviderName")] public string ProviderName { get; set; } = null!; [Column("secret")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs index a7aedfff6bbf..3c773b4a6411 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs @@ -5,16 +5,17 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class User2ClientIdDto { public const string TableName = Constants.DatabaseSchema.Tables.User2ClientId; - public const string PrimaryKeyName = "userId"; - public const string ClientIdName = "clientId"; + public const string PrimaryKeyColumnName = "userId"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyName}, {ClientIdName}")] + private const string ClientIdName = "clientId"; + + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyColumnName}, {ClientIdName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs index f0bea89273e7..7eb08f636d7f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs @@ -5,21 +5,21 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class User2NodeNotifyDto { public const string TableName = Constants.DatabaseSchema.Tables.User2NodeNotify; - public const string PrimaryKeyName = "userId"; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = "userId"; + public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; public const string ActionColumnName = "action"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyName}, {NodeIdName}, {ActionColumnName}")] + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyColumnName}, {NodeIdColumnName}, {ActionColumnName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2UserGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2UserGroupDto.cs index fd0da99f3981..89869377c839 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2UserGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2UserGroupDto.cs @@ -10,12 +10,15 @@ public class User2UserGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.User2UserGroup; - [Column("userId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_user2userGroup", OnColumns = "userId, userGroupId")] + private const string UserIdColumnName = "userId"; + private const string UserGroupIdColumnName = "userGroupId"; + + [Column(UserIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_user2userGroup", OnColumns = $"{UserIdColumnName}, {UserGroupIdColumnName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column("userGroupId")] + [Column(UserGroupIdColumnName)] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs index 28fb48185cbc..34ea0220d996 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs @@ -6,28 +6,32 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class UserDataDto { public const string TableName = Constants.DatabaseSchema.Tables.UserData; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; - [Column(PrimaryKeyName)] + private const string UserKeyColumnName = "userKey"; + private const string GroupColumnName = "group"; + private const string IdentifierColumnName = "identifier"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoUserDataDto", AutoIncrement = false)] public Guid Key { get; set; } - [Column("userKey")] + [Column(UserKeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserDataDto_UserKey_Group_Identifier", IncludeColumns = "group,identifier")] - [ForeignKey(typeof(UserDto), Column = "key")] + [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserDataDto_UserKey_Group_Identifier", IncludeColumns = $"{GroupColumnName},{IdentifierColumnName}")] + [ForeignKey(typeof(UserDto), Column = UserDto.KeyColumnName)] public Guid UserKey { get; set; } - [Column("group")] + [Column(GroupColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] public required string Group { get; set; } - [Column("identifier")] + [Column(IdentifierColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] public required string Identifier { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs index b01435e05de4..1687e28848f7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs @@ -6,12 +6,13 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class UserDto { public const string TableName = Constants.DatabaseSchema.Tables.User; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string KeyColumnName = "key"; public UserDto() { @@ -19,7 +20,7 @@ public UserDto() UserStartNodeDtos = new HashSet(); } - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_user")] public int Id { get; set; } @@ -27,7 +28,7 @@ public UserDto() [Constraint(Default = "0")] public bool Disabled { get; set; } - [Column("key")] + [Column(KeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [Constraint(Default = SystemMethods.NewGuid)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoUser_userKey")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs index a2df9218e3ce..da6becd2c5d3 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs @@ -5,16 +5,17 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class UserGroup2AppDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2App; - public const string PrimaryKeyName = "userGroupId"; - public const string AppAliasName = "app"; + public const string PrimaryKeyColumnName = "userGroupId"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = $"{PrimaryKeyName}, {AppAliasName}")] + private const string AppAliasName = "app"; + + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = $"{PrimaryKeyColumnName}, {AppAliasName}")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs index d1693b471621..5d2471d4482a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs @@ -5,25 +5,25 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class UserGroup2GranularPermissionDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2GranularPermission; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string UniqueIdName = Constants.DatabaseSchema.Columns.UniqueIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string UniqueIdColumnName = Constants.DatabaseSchema.Columns.UniqueIdName; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoUserGroup2GranularPermissionDto", AutoIncrement = true)] public int Id { get; set; } [Column("userGroupKey")] - [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UserGroupKey_UniqueId", IncludeColumns = UniqueIdName)] + [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UserGroupKey_UniqueId", IncludeColumns = UniqueIdColumnName)] [ForeignKey(typeof(UserGroupDto), Column = UserGroupDto.KeyColumnName)] public Guid UserGroupKey { get; set; } - [Column(UniqueIdName)] - [ForeignKey(typeof(NodeDto), Column = UniqueIdName)] + [Column(UniqueIdColumnName)] + [ForeignKey(typeof(NodeDto), Column = UniqueIdColumnName)] [NullSetting(NullSetting = NullSettings.Null)] [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UniqueId")] public Guid? UniqueId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs index 36ba42bb4ec8..cd2b40f5094d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs @@ -10,12 +10,15 @@ public class UserGroup2LanguageDto { public const string TableName = Cms.Core.Constants.DatabaseSchema.Tables.UserGroup2Language; - [Column("userGroupId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2language", OnColumns = "userGroupId, languageId")] + private const string UserGroupIdColumnName = "userGroupId"; + private const string LanguageIdColumnName = "languageId"; + + [Column(UserGroupIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2language", OnColumns = $"{UserGroupIdColumnName}, {LanguageIdColumnName}")] [ForeignKey(typeof(UserGroupDto), OnDelete = Rule.Cascade)] public int UserGroupId { get; set; } - [Column("languageId")] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto), OnDelete = Rule.Cascade)] public int LanguageId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodeDto.cs index afc21fb6f04d..772d7ac4707b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodeDto.cs @@ -11,12 +11,15 @@ internal sealed class UserGroup2NodeDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2Node; - [Column("userGroupId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_" + TableName, OnColumns = "userGroupId, nodeId")] + private const string UserGroupIdColumnName = "userGroupId"; + private const string NodeIdColumnName = "nodeId"; + + [Column(UserGroupIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_" + TableName, OnColumns = $"{UserGroupIdColumnName}, {NodeIdColumnName}")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } - [Column("nodeId")] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_nodeId")] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodePermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodePermissionDto.cs index d6c14c432b36..2c0e43e65598 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodePermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodePermissionDto.cs @@ -9,16 +9,20 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [ExplicitColumns] internal class UserGroup2NodePermissionDto { - [Column("userGroupId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUserGroup2NodePermission", OnColumns = "userGroupId, nodeId, permission")] + private const string UserGroupIdColumnName = "userGroupId"; + private const string NodeIdColumnName = "nodeId"; + private const string PermissionColumnName = "permission"; + + [Column(UserGroupIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUserGroup2NodePermission", OnColumns = $"{UserGroupIdColumnName}, {NodeIdColumnName}, {PermissionColumnName}")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } - [Column("nodeId")] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] [Index(IndexTypes.NonClustered, Name = "IX_umbracoUser2NodePermission_nodeId")] public int NodeId { get; set; } - [Column("permission")] + [Column(PermissionColumnName)] public string? Permission { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs index 14856d8db57c..3b4a86d5e99f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs @@ -5,23 +5,25 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class UserGroup2PermissionDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2Permission; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string PermissionName = "permission"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_userGroup2Permission", AutoIncrement = true)] public int Id { get; set; } [Column("userGroupKey")] - [Index(IndexTypes.NonClustered, IncludeColumns = "permission")] - [ForeignKey(typeof(UserGroupDto), Column = "key")] + [Index(IndexTypes.NonClustered, IncludeColumns = PermissionName)] + [ForeignKey(typeof(UserGroupDto), Column = UserGroupDto.KeyColumnName)] public Guid UserGroupKey { get; set; } - [Column("permission")] + [Column(PermissionName)] [Length(255)] public required string Permission { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs index 70cae402f08a..760c89e784d7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs @@ -6,12 +6,12 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class UserGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const string KeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; public UserGroupDto() @@ -22,7 +22,7 @@ public UserGroupDto() UserGroup2GranularPermissionDtos = new List(); } - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 6)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs index 9899741bec46..f0ce1e9f43de 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class UserLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.UserLogin; - public const string PrimaryKeyName = "sessionId"; + public const string PrimaryKeyColumnName = "sessionId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] public Guid SessionId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs index a4c082b3d104..9b3ea6daad55 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs @@ -5,12 +5,16 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class UserStartNodeDto : IEquatable { public const string TableName = Constants.DatabaseSchema.Tables.UserStartNode; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + + private const string UserIdColumnName = "userId"; + private const string StartNodeColumnName = "startNode"; + private const string StartNodeTypeColumnName = "startNodeType"; public enum StartNodeTypeValue { @@ -18,23 +22,23 @@ public enum StartNodeTypeValue Media = 2, } - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_userStartNode")] public int Id { get; set; } - [Column("userId")] + [Column(UserIdColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column("startNode")] + [Column(StartNodeColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [ForeignKey(typeof(NodeDto))] public int StartNode { get; set; } - [Column("startNodeType")] + [Column(StartNodeTypeColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "startNodeType, startNode, userId", Name = "IX_umbracoUserStartNode_startNodeType")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{StartNodeTypeColumnName}, {StartNodeColumnName}, {UserIdColumnName}", Name = "IX_umbracoUserStartNode_startNodeType")] public int StartNodeType { get; set; } public static bool operator ==(UserStartNodeDto left, UserStartNodeDto right) => Equals(left, right); diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs index 71bbed5962fb..bab04877cbad 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs @@ -1,4 +1,4 @@ -using System.Data; +using System.Data; using NPoco; using Umbraco.Cms.Core; using Umbraco.Cms.Infrastructure.Persistence.DatabaseAnnotations; @@ -10,11 +10,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [ExplicitColumns] public class Webhook2ContentTypeKeysDto { - [Column("webhookId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_webhookEntityKey2Webhook", OnColumns = "webhookId, entityKey")] + private const string WebhookIdColumnName = "webhookId"; + private const string ContentTypeKeyColumnName = "entityKey"; + + [Column(WebhookIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_webhookEntityKey2Webhook", OnColumns = $"{WebhookIdColumnName}, {ContentTypeKeyColumnName}")] [ForeignKey(typeof(WebhookDto), OnDelete = Rule.Cascade)] public int WebhookId { get; set; } - [Column("entityKey")] + [Column(ContentTypeKeyColumnName)] public Guid ContentTypeKey { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs index d534cf4c36e3..614393883d99 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs @@ -10,11 +10,14 @@ public class Webhook2EventsDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook2Events; - [Column("webhookId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_webhookEvent2WebhookDto", OnColumns = "webhookId, event")] + private const string WebhookIdColumnName = "webhookId"; + private const string EventColumnName = "event"; + + [Column(WebhookIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_webhookEvent2WebhookDto", OnColumns = $"{WebhookIdColumnName}, {EventColumnName}")] [ForeignKey(typeof(WebhookDto), OnDelete = Rule.Cascade)] public int WebhookId { get; set; } - [Column("event")] + [Column(EventColumnName)] public string Event { get; set; } = string.Empty; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs index d7fbfba8b502..38717d72ba5a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs @@ -9,18 +9,19 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class Webhook2HeadersDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook2Headers; - public const string KeyName = "Key"; - public const string ValueName = "Value"; - public const string WebhookIdName = "WebhookId"; - [Column(WebhookIdName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_headers2WebhookDto", OnColumns = $"{WebhookIdName}, {KeyName}")] + private const string WebhookIdColumnName = "webhookId"; + private const string KeyColumnName = "Key"; + private const string ValueColumnName = "Value"; + + [Column(WebhookIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_headers2WebhookDto", OnColumns = $"{WebhookIdColumnName}, {KeyColumnName}")] [ForeignKey(typeof(WebhookDto), OnDelete = Rule.Cascade)] public int WebhookId { get; set; } - [Column(KeyName)] + [Column(KeyColumnName)] public string Key { get; set; } = string.Empty; - [Column(ValueName)] + [Column(ValueColumnName)] public string Value { get; set; } = string.Empty; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs index 0bcf0f645a03..33e52bb6909c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class WebhookDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs index 2a53acc41c17..d299f0eaf967 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class WebhookLogDto { public const string TableName = Constants.DatabaseSchema.Tables.WebhookLog; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs index b3d63c5c90cb..9e524ba63fcd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class WebhookRequestDto { public const string TableName = Constants.DatabaseSchema.Tables.WebhookRequest; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } From bb0dcd431f5f8ccdda60d733fcb1f26690fc235b Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Sat, 10 Jan 2026 10:39:23 +0100 Subject: [PATCH 10/20] fix database schema --- .../UmbracoDbContext.cs | 2 +- .../Persistence/Constants-DatabaseSchema.cs | 5 +-- .../Persistence/Dtos/AccessDto.cs | 6 ++-- .../Persistence/Dtos/AccessRuleDto.cs | 18 ++++++---- .../Persistence/Dtos/AuditEntryDto.cs | 6 ++-- .../Persistence/Dtos/CacheInstructionDto.cs | 6 ++-- .../Persistence/Dtos/ConsentDto.cs | 6 ++-- .../Persistence/Dtos/ContentDto.cs | 16 ++++----- .../Persistence/Dtos/ContentNuDto.cs | 24 +++++++------ .../Persistence/Dtos/ContentScheduleDto.cs | 6 ++-- .../Dtos/ContentType2ContentTypeDto.cs | 10 +++--- .../Dtos/ContentTypeAllowedContentTypeDto.cs | 21 ++++++------ .../Persistence/Dtos/ContentTypeDto.cs | 11 +++--- .../Dtos/ContentTypeTemplateDto.cs | 4 +-- .../Dtos/ContentVersionCleanupPolicyDto.cs | 2 +- .../Dtos/ContentVersionCultureVariationDto.cs | 19 ++++++----- .../Persistence/Dtos/ContentVersionDto.cs | 33 +++++++++++------- .../Dtos/CreatedPackageSchemaDto.cs | 12 ++++--- .../Persistence/Dtos/DataTypeDto.cs | 6 ++-- .../Persistence/Dtos/DictionaryDto.cs | 13 +++---- .../Persistence/Dtos/DistributedJobDto.cs | 6 ++-- .../Dtos/DocumentCultureVariationDto.cs | 15 ++++---- .../Persistence/Dtos/DocumentDto.cs | 6 ++-- .../Persistence/Dtos/DocumentUrlDto.cs | 27 +++++++++------ .../Persistence/Dtos/DocumentVersionDto.cs | 19 ++++++----- .../Persistence/Dtos/DomainDto.cs | 6 ++-- .../Persistence/Dtos/ExternalLoginDto.cs | 24 ++++++++----- .../Persistence/Dtos/ExternalLoginTokenDto.cs | 20 ++++++----- .../Persistence/Dtos/KeyValueDto.cs | 6 ++-- .../Persistence/Dtos/LanguageDto.cs | 6 ++-- .../Persistence/Dtos/LanguageTextDto.cs | 15 ++++---- .../Persistence/Dtos/LastSyncedDto.cs | 6 ++-- .../Persistence/Dtos/LockDto.cs | 6 ++-- .../Persistence/Dtos/LogDto.cs | 22 +++++++----- .../Persistence/Dtos/LogViewerQueryDto.cs | 6 ++-- .../Dtos/LongRunningOperationDto.cs | 6 ++-- .../Persistence/Dtos/MediaVersionDto.cs | 12 ++++--- .../Persistence/Dtos/Member2MemberGroupDto.cs | 11 +++--- .../Persistence/Dtos/MemberDto.cs | 10 +++--- .../Persistence/Dtos/MemberPropertyTypeDto.cs | 12 +++---- .../Persistence/Dtos/NodeDto.cs | 34 +++++++++++-------- .../Persistence/Dtos/PropertyDataDto.cs | 25 ++++++++------ .../Persistence/Dtos/PropertyTypeDto.cs | 22 ++++++------ .../Persistence/Dtos/PropertyTypeGroupDto.cs | 18 +++++----- .../Dtos/PropertyTypeGroupReadOnlyDto.cs | 6 ++-- .../Dtos/PropertyTypeReadOnlyDto.cs | 6 ++-- .../Persistence/Dtos/RedirectUrlDto.cs | 28 +++++++++------ .../Persistence/Dtos/RelationDto.cs | 18 ++++++---- .../Persistence/Dtos/RelationTypeDto.cs | 6 ++-- .../Dtos/RepositoryCacheVersionDto.cs | 6 ++-- .../Persistence/Dtos/ServerRegistrationDto.cs | 6 ++-- .../Persistence/Dtos/TagDto.cs | 20 ++++++----- .../Persistence/Dtos/TagRelationshipDto.cs | 20 +++++------ .../Persistence/Dtos/TemplateDto.cs | 13 ++++--- .../Persistence/Dtos/TwoFactorLoginDto.cs | 15 ++++---- .../Persistence/Dtos/User2ClientIdDto.cs | 11 +++--- .../Persistence/Dtos/User2NodeNotifyDto.cs | 12 +++---- .../Persistence/Dtos/User2UserGroupDto.cs | 9 +++-- .../Persistence/Dtos/UserDataDto.cs | 20 ++++++----- .../Persistence/Dtos/UserDto.cs | 9 ++--- .../Persistence/Dtos/UserGroup2AppDto.cs | 11 +++--- .../Dtos/UserGroup2GranularPermissionDto.cs | 14 ++++---- .../Persistence/Dtos/UserGroup2LanguageDto.cs | 9 +++-- .../Persistence/Dtos/UserGroup2NodeDto.cs | 9 +++-- .../Dtos/UserGroup2NodePermissionDto.cs | 12 ++++--- .../Dtos/UserGroup2PermissionDto.cs | 14 ++++---- .../Persistence/Dtos/UserGroupDto.cs | 6 ++-- .../Persistence/Dtos/UserLoginDto.cs | 6 ++-- .../Persistence/Dtos/UserStartNodeDto.cs | 18 ++++++---- .../Dtos/Webhook2ContentTypeKeysDto.cs | 11 +++--- .../Persistence/Dtos/Webhook2EventsDto.cs | 9 +++-- .../Persistence/Dtos/Webhook2HeadersDto.cs | 15 ++++---- .../Persistence/Dtos/WebhookDto.cs | 6 ++-- .../Persistence/Dtos/WebhookLogDto.cs | 6 ++-- .../Persistence/Dtos/WebhookRequestDto.cs | 6 ++-- 75 files changed, 515 insertions(+), 408 deletions(-) diff --git a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs index 793a3d675a50..ca69e31727d2 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs @@ -84,7 +84,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes()) { - entity.SetTableName(Core.Constants.DatabaseSchema.Tables.TableNamePrefix + entity.GetTableName()); + entity.SetTableName(Core.Constants.DatabaseSchema.TableNamePrefix + entity.GetTableName()); } } } diff --git a/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs b/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs index e359c70335c3..9ac02f409c2e 100644 --- a/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs +++ b/src/Umbraco.Core/Persistence/Constants-DatabaseSchema.cs @@ -6,6 +6,9 @@ public static partial class Constants { public static class DatabaseSchema { + // TODO: Why aren't all table names with the same prefix? + public const string TableNamePrefix = "umbraco"; + public static class Columns { // Defines constants for common field names used throughout the database, to ensure @@ -19,8 +22,6 @@ public static class Columns public static class Tables { - // TODO: Why aren't all table names with the same prefix? - public const string TableNamePrefix = "umbraco"; public const string Lock = TableNamePrefix + "Lock"; public const string Log = TableNamePrefix + "Log"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs index 2d99f87ba056..9498b8d1c4d0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class AccessDto { public const string TableName = Constants.DatabaseSchema.Tables.Access; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoAccess", AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs index dd12fc334fbd..2ac8cb73b912 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs @@ -6,26 +6,30 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class AccessRuleDto { public const string TableName = Constants.DatabaseSchema.Tables.AccessRule; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string RuleValueName = "ruleValue"; + private const string RuleTypeName = "ruleType"; + private const string AssessIdName = "accessId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoAccessRule", AutoIncrement = false)] public Guid Id { get; set; } - [Column("accessId")] + [Column(AssessIdName)] [ForeignKey(typeof(AccessDto), Name = "FK_umbracoAccessRule_umbracoAccess_id")] public Guid AccessId { get; set; } - [Column("ruleValue")] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "ruleValue,ruleType,accessId", Name = "IX_umbracoAccessRule")] + [Column(RuleValueName)] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{RuleValueName},{RuleTypeName},{AssessIdName}", Name = "IX_umbracoAccessRule")] public string? RuleValue { get; set; } - [Column("ruleType")] + [Column(RuleTypeName)] public string? RuleType { get; set; } [Column("createDate")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs index d39dd8bba40f..0354fad8bf31 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AuditEntryDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class AuditEntryDto { public const string TableName = Constants.DatabaseSchema.Tables.AuditEntry; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs index fc4bef2a4cb7..6201df164d66 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/CacheInstructionDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class CacheInstructionDto { public const string TableName = Constants.DatabaseSchema.Tables.CacheInstruction; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [PrimaryKeyColumn(AutoIncrement = true, Name = "PK_umbracoCacheInstruction")] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs index 2da6a6db9750..e952064d26f0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ConsentDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class ConsentDto { public const string TableName = Constants.DatabaseSchema.Tables.Consent; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs index 49790c00ac27..2d3c4d63bf1f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs @@ -5,31 +5,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class ContentDto { public const string TableName = Constants.DatabaseSchema.Tables.Content; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string ContentTypeIdName = "contentTypeId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string ContentTypeIdColumnName = "contentTypeId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } - [Column(ContentTypeIdName)] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [Column(ContentTypeIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int ContentTypeId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = PrimaryKeyName)] + [Reference(ReferenceType.OneToOne, ColumnName = PrimaryKeyColumnName)] public NodeDto NodeDto { get; set; } = null!; // although a content has many content versions, // they can only be loaded one by one (as several content), // so this here is a OneToOne reference [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = PrimaryKeyName)] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = PrimaryKeyColumnName)] public ContentVersionDto ContentVersionDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs index 77468e8bb902..af08ac65f4e2 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentNuDto.cs @@ -6,22 +6,24 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class ContentNuDto { public const string TableName = Constants.DatabaseSchema.Tables.NodeData; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string PublishedName = "published"; - public const string RvName = "rv"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsContentNu", OnColumns = $"{PrimaryKeyName}, {PublishedName}")] - [ForeignKey(typeof(ContentDto), Column = PrimaryKeyName, OnDelete = Rule.Cascade)] + private const string PublishedColumnName = "published"; + private const string RvColumnName = "rv"; + private const string DataRawColumnName = "dataRaw"; + + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsContentNu", OnColumns = $"{PrimaryKeyColumnName}, {PublishedColumnName}")] + [ForeignKey(typeof(ContentDto), Column = PrimaryKeyColumnName, OnDelete = Rule.Cascade)] public int NodeId { get; set; } - [Column(PublishedName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = $"{PublishedName},{PrimaryKeyName},{RvName}", IncludeColumns = "dataRaw")] + [Column(PublishedColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_" + PublishedColumnName, ForColumns = $"{PublishedColumnName},{PrimaryKeyColumnName},{RvColumnName}", IncludeColumns = DataRawColumnName)] public bool Published { get; set; } /// @@ -35,10 +37,10 @@ public class ContentNuDto [NullSetting(NullSetting = NullSettings.Null)] public string? Data { get; set; } - [Column(RvName)] + [Column(RvColumnName)] public long Rv { get; set; } - [Column("dataRaw")] + [Column(DataRawColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public byte[]? RawData { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs index a4ebdd56b17d..4291a7d1baf9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentScheduleDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class ContentScheduleDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentSchedule; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs index 4c6fea5be1ba..06c96c67b10d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentType2ContentTypeDto.cs @@ -9,15 +9,15 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; internal sealed class ContentType2ContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentTypeTree; - public const string PrimaryKeyName = "parentContentTypeId"; - public const string ChildIdName = "childContentTypeId"; + public const string PrimaryKeyColumnName = "parentContentTypeId"; + public const string ChildIdColumnName = "childContentTypeId"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentType2ContentType", OnColumns = $"{PrimaryKeyName}, {ChildIdName}")] + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentType2ContentType", OnColumns = $"{PrimaryKeyColumnName}, {ChildIdColumnName}")] [ForeignKey(typeof(NodeDto), Name = "FK_cmsContentType2ContentType_umbracoNode_parent")] public int ParentId { get; set; } - [Column(ChildIdName)] + [Column(ChildIdColumnName)] [ForeignKey(typeof(NodeDto), Name = "FK_cmsContentType2ContentType_umbracoNode_child")] public int ChildId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs index a5d906298677..61ffd88ab5f8 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs @@ -5,7 +5,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class ContentTypeAllowedContentTypeDto { @@ -13,20 +13,21 @@ internal sealed class ContentTypeAllowedContentTypeDto // ToDo: Here we have an incosistent column name in DatabaseSchema. It should be Constants.DatabaseSchema.Columns.PrimaryKeyNameId; ("id") // For now we leave the databse schema as is to avoid breaking changes. - public const string PrimaryKeyName = "Id"; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string AllowedIdName = "AllowedId"; + public const string PrimaryKeyColumnName = "Id"; + public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string SortOrderColumnName = "SortOrder"; + public const string AllowedIdColumnName = "AllowedId"; - [Column(PrimaryKeyName)] - [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = NodeIdName)] - [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = $"{PrimaryKeyName}, {AllowedIdName}")] + [Column(PrimaryKeyColumnName)] + [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType", Column = NodeIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_cmsContentTypeAllowedContentType", OnColumns = $"{PrimaryKeyColumnName}, {AllowedIdColumnName}")] public int Id { get; set; } - [Column(AllowedIdName)] - [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = NodeIdName)] + [Column(AllowedIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Name = "FK_cmsContentTypeAllowedContentType_cmsContentType1", Column = NodeIdColumnName)] public int AllowedId { get; set; } - [Column("SortOrder")] + [Column(SortOrderColumnName)] [Constraint(Name = "df_cmsContentTypeAllowedContentType_sortOrder", Default = "0")] public int SortOrder { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs index d30877eabfe9..18d1476f05db 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs @@ -5,23 +5,24 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal class ContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + private string? _alias; // Public constants to bind properties between DTOs public const string VariationsColumnName = "variations"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 700)] public int PrimaryKey { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsContentType")] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs index ef03626eed5c..e226a8ee7928 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeTemplateDto.cs @@ -15,12 +15,12 @@ internal sealed class ContentTypeTemplateDto [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsDocumentType", OnColumns = $"{PrimaryKeyName}, {TemplateNodeIdName}")] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] public int ContentTypeNodeId { get; set; } [Column(TemplateNodeIdName)] - [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdName)] + [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdColumnName)] public int TemplateNodeId { get; set; } [Column("IsDefault")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs index c5db02bd7728..4ddd6386951e 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCleanupPolicyDto.cs @@ -14,7 +14,7 @@ internal sealed class ContentVersionCleanupPolicyDto [Column(PrimaryKeyName)] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoContentVersionCleanupPolicy")] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int ContentTypeId { get; set; } [Column("preventCleanup")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs index 9e601ba045c7..6e85c2486494 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs @@ -5,26 +5,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class ContentVersionCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersionCultureVariation; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string LanguageIdName = "languageId"; - public const string VersionIdName = "versionId"; - public const string UpdateUserIdName = "availableUserId"; - public const string UpdateDateName = "date"; - public const string NameName = "name"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + + private const string LanguageIdName = "languageId"; + private const string VersionIdName = "versionId"; + private const string UpdateUserIdName = "availableUserId"; + private const string UpdateDateName = "date"; + private const string NameName = "name"; private int? _updateUserId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } [Column(VersionIdName)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{LanguageIdName}", IncludeColumns = $"{PrimaryKeyName},{NameName},{UpdateDateName},{UpdateUserIdName}")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{LanguageIdName}", IncludeColumns = $"{PrimaryKeyColumnName},{NameName},{UpdateDateName},{UpdateUserIdName}")] public int VersionId { get; set; } [Column(LanguageIdName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs index f95fece8a755..e358a7b75600 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs @@ -6,34 +6,43 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class ContentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + + private const string UserIdColumnName = "userId"; + private const string VersionDateColumnName = "versionDate"; + private const string CurrentColumnName = "current"; + private const string TextColumnName = "text"; + private const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + private const string PreventCleanupColumnName = "preventCleanup"; + private const string ReferenceColumnName = "NodeId"; + private int? _userId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("nodeId")] + [Column(NodeIdColumnName)] [ForeignKey(typeof(ContentDto))] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = "nodeId,current", IncludeColumns = "id,versionDate,text,userId,preventCleanup")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = $"{NodeIdColumnName},{CurrentColumnName}", IncludeColumns = $"{PrimaryKeyColumnName},{VersionDateColumnName},{TextColumnName},{UserIdColumnName},{PreventCleanupColumnName}")] public int NodeId { get; set; } - [Column("versionDate")] // TODO: db rename to 'updateDate' + [Column(VersionDateColumnName)] // TODO: db rename to 'updateDate' [Constraint(Default = SystemMethods.CurrentUTCDateTime)] public DateTime VersionDate { get; set; } - [Column("userId")] // TODO: db rename to 'updateUserId' + [Column(UserIdColumnName)] // TODO: db rename to 'updateUserId' [ForeignKey(typeof(UserDto))] [NullSetting(NullSetting = NullSettings.Null)] public int? UserId { get => _userId == 0 ? null : _userId; set => _userId = value; } // return null if zero - [Column("current")] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Current", IncludeColumns = "nodeId")] + [Column(CurrentColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Current", IncludeColumns = NodeIdColumnName)] public bool Current { get; set; } // about current: @@ -42,15 +51,15 @@ public class ContentVersionDto // we could use a content.currentVersionId FK that would need to be nullable, or (better?) an additional table // linking a content itemt to its current version (nodeId, versionId) - that would guarantee uniqueness BUT it would // not guarantee existence - so, really... we are trusting our code to manage 'current' correctly. - [Column("text")] + [Column(TextColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Text { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "NodeId", ReferenceMemberName = "NodeId")] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName, ReferenceMemberName = ReferenceColumnName)] public ContentDto? ContentDto { get; set; } - [Column("preventCleanup")] + [Column(PreventCleanupColumnName)] [Constraint(Default = "0")] public bool PreventCleanup { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs index c8b5ecf2e0c9..041c189e8291 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/CreatedPackageSchemaDto.cs @@ -7,20 +7,22 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] public class CreatedPackageSchemaDto { public const string TableName = Constants.DatabaseSchema.Tables.CreatedPackageSchema; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string NameColumnName = "name"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("name")] + [Column(NameColumnName)] [Length(255)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "name", Name = "IX_" + TableName + "_Name")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = NameColumnName, Name = "IX_" + TableName + "_Name")] public string Name { get; set; } = null!; [Column("value")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs index 199f01ac1a44..6c840b808f89 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class DataTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.DataType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs index 16d160fd9a26..8e020ddfb5a0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs @@ -5,20 +5,21 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class DictionaryDto // public as required to be accessible from Deploy for the RepairDictionaryIdsWorkItem. { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryEntry; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string ReferenceName = "UniqueId"; - public const string UniqueIdName = "id"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string UniqueIdColumnName = "id"; - [Column(PrimaryKeyName)] + private const string ReferenceName = "UniqueId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column(UniqueIdName)] + [Column(UniqueIdColumnName)] [Index(IndexTypes.UniqueNonClustered)] public Guid UniqueId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs index 2f263dff4724..38e44b0923b6 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DistributedJobDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class DistributedJobDto { public const string TableName = Constants.DatabaseSchema.Tables.DistributedJob; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs index 3d60598eb68b..2b9781c747f6 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs @@ -5,26 +5,29 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class DocumentCultureVariationDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentCultureVariation; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; - [Column(PrimaryKeyName)] + private const string LanguageIdName = "languageId"; + private const string NodeIdName = "nodeId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("nodeId")] + [Column(NodeIdName)] [ForeignKey(typeof(NodeDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = "nodeId,languageId")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = $"{NodeIdName},{LanguageIdName}")] public int NodeId { get; set; } - [Column("languageId")] + [Column(LanguageIdName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] public int LanguageId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs index 5bda35ad2e34..5da45a916a45 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs @@ -5,18 +5,18 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class DocumentDto { public const string TableName = Constants.DatabaseSchema.Tables.Document; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs index 18626f7990a1..1b0bc59f608f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentUrlDto.cs @@ -6,34 +6,39 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class DocumentUrlDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentUrl; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - - [Column(PrimaryKeyName)] + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string UniqueIdColumnName = "uniqueId"; + public const string IsDraftColumnName = "isDraft"; + public const string LanguageIdColumnName = "languageId"; + public const string UrlSegmentColumnName = "urlSegment"; + public const string IsPrimaryColumnName = "isPrimary"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Clustered = false, AutoIncrement = true)] public int NodeId { get; set; } - [Index(IndexTypes.UniqueClustered, ForColumns = "uniqueId, languageId, isDraft, urlSegment", Name = "IX_" + TableName)] - [Column("uniqueId")] - [ForeignKey(typeof(NodeDto), Column = "uniqueId")] + [Index(IndexTypes.UniqueClustered, ForColumns = $"{UniqueIdColumnName}, {LanguageIdColumnName}, {IsDraftColumnName}, {UrlSegmentColumnName}", Name = "IX_" + TableName)] + [Column(UniqueIdColumnName)] + [ForeignKey(typeof(NodeDto), Column = NodeDto.KeyColumnName)] public Guid UniqueId { get; set; } - [Column("isDraft")] + [Column(IsDraftColumnName)] public bool IsDraft { get; set; } - [Column("languageId")] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto))] public int LanguageId { get; set; } - [Column("urlSegment")] + [Column(UrlSegmentColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] public string UrlSegment { get; set; } = string.Empty; - [Column("isPrimary")] + [Column(IsPrimaryColumnName)] [Constraint(Default = 1)] public bool IsPrimary { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs index f779463227aa..ef4992d7081c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs @@ -5,28 +5,29 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class DocumentVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.DocumentVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string PublishedName = "published"; - public const string TemplateIdName = "templateId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PublishedColumnName = "published"; - [Column(PrimaryKeyName)] + private const string TemplateIdName = "templateId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = $"{PrimaryKeyName},{PublishedName}", IncludeColumns = TemplateIdName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = $"{PrimaryKeyColumnName},{PublishedColumnName}", IncludeColumns = TemplateIdName)] public int Id { get; set; } [Column(TemplateIdName)] [NullSetting(NullSetting = NullSettings.Null)] - [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdName)] + [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdColumnName)] public int? TemplateId { get; set; } - [Column(PublishedName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = PublishedName, IncludeColumns = $"{PrimaryKeyName},{TemplateIdName}")] + [Column(PublishedColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = PublishedColumnName, IncludeColumns = $"{PrimaryKeyColumnName},{TemplateIdName}")] public bool Published { get; set; } [ResultColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs index b2a87a4f21b3..36b27a68134b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DomainDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class DomainDto { public const string TableName = Constants.DatabaseSchema.Tables.Domain; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs index c0d5b538e84f..a1d045e94c98 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginDto.cs @@ -7,40 +7,46 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] internal sealed class ExternalLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.ExternalLogin; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string UserIdColumnName = "userId"; + private const string UserOrMemberKeyColumnName = "userOrMemberKey"; + private const string LoginProviderColumnName = "loginProvider"; + private const string ProviderKeyColumnName = "providerKey"; + + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } [Obsolete("This only exists to ensure you can upgrade using external logins from umbraco version where this was used to the new where it is not used")] - [ResultColumn("userId")] + [ResultColumn(UserIdColumnName)] public int? UserId { get; set; } - [Column("userOrMemberKey")] + [Column(UserOrMemberKeyColumnName)] [Index(IndexTypes.NonClustered)] public Guid UserOrMemberKey { get; set; } /// /// Used to store the name of the provider (i.e. Facebook, Google) /// - [Column("loginProvider")] + [Column(LoginProviderColumnName)] [Length(400)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "loginProvider,userOrMemberKey", Name = "IX_" + TableName + "_LoginProvider")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{LoginProviderColumnName},{UserOrMemberKeyColumnName}", Name = "IX_" + TableName + "_LoginProvider")] public string LoginProvider { get; set; } = null!; /// /// Stores the key the provider uses to lookup the login /// - [Column("providerKey")] + [Column(ProviderKeyColumnName)] [Length(4000)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.NonClustered, ForColumns = "loginProvider,providerKey", Name = "IX_" + TableName + "_ProviderKey")] + [Index(IndexTypes.NonClustered, ForColumns = $"{LoginProviderColumnName},{ProviderKeyColumnName}", Name = "IX_" + TableName + "_ProviderKey")] public string ProviderKey { get; set; } = null!; [Column("createDate")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs index ab7e3a5d5afd..acabe5623fb1 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs @@ -7,24 +7,28 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] internal sealed class ExternalLoginTokenDto { public const string TableName = Constants.DatabaseSchema.Tables.ExternalLoginToken; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string ExternalLoginIdColumnName = "externalLoginId"; + private const string NameColumnName = "name"; + private const string ReferenceColumnName = "ExternalLoginId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("externalLoginId")] - [ForeignKey(typeof(ExternalLoginDto), Column = "id")] + [Column(ExternalLoginIdColumnName)] + [ForeignKey(typeof(ExternalLoginDto), Column = ExternalLoginDto.PrimaryKeyColumnName)] public int ExternalLoginId { get; set; } - [Column("name")] + [Column(NameColumnName)] [Length(255)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "externalLoginId,name", Name = "IX_" + TableName + "_Name")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{ExternalLoginIdColumnName},{NameColumnName}", Name = "IX_" + TableName + "_Name")] public string Name { get; set; } = null!; [Column("value")] @@ -37,6 +41,6 @@ internal sealed class ExternalLoginTokenDto public DateTime CreateDate { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "ExternalLoginId")] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public ExternalLoginDto ExternalLoginDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs index 483c7de0a81d..be3ae145d4e5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/KeyValueDto.cs @@ -7,14 +7,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class KeyValueDto { public const string TableName = Constants.DatabaseSchema.Tables.KeyValue; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [Length(256)] [PrimaryKeyColumn(AutoIncrement = false, Clustered = true)] public string Key { get; set; } = null!; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs index 5fdcbbfa1724..d655187b00fe 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageDto.cs @@ -5,12 +5,12 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class LanguageDto { public const string TableName = Constants.DatabaseSchema.Tables.Language; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; // Public constants to bind properties between DTOs public const string IsoCodeColumnName = "languageISOCode"; @@ -18,7 +18,7 @@ internal sealed class LanguageDto /// /// Gets or sets the identifier of the language. /// - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 2)] public short Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs index a29cc3d890fa..3038b61473ff 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs @@ -5,26 +5,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class LanguageTextDto { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryValue; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string LanguageIdName = "languageId"; - public const string UniqueIdName = "UniqueId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - [Column(PrimaryKeyName)] + private const string LanguageIdName = "languageId"; + private const string UniqueIdName = "UniqueId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } [Column(LanguageIdName)] - [ForeignKey(typeof(LanguageDto), Column = LanguageDto.PrimaryKeyName)] + [ForeignKey(typeof(LanguageDto), Column = LanguageDto.PrimaryKeyColumnName)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_languageId", ForColumns = $"{LanguageIdName},{UniqueIdName}")] public int LanguageId { get; set; } [Column(UniqueIdName)] - [ForeignKey(typeof(DictionaryDto), Column = DictionaryDto.UniqueIdName)] + [ForeignKey(typeof(DictionaryDto), Column = DictionaryDto.UniqueIdColumnName)] public Guid UniqueId { get; set; } [Column("value")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs index 47298aa2885b..74c4c2dae402 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LastSyncedDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class LastSyncedDto { internal const string TableName = Constants.DatabaseSchema.Tables.LastSynced; - public const string PrimaryKeyName = "machineId"; + public const string PrimaryKeyColumnName = "machineId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_lastSyncedMachineId", AutoIncrement = false, Clustered = true)] public required string MachineId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs index 3fadbbfba5c7..27f25091834a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LockDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class LockDto { public const string TableName = Constants.DatabaseSchema.Tables.Lock; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoLock", AutoIncrement = false)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs index 9a8a18bc7b4e..c0b56fcf30f9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogDto.cs @@ -6,25 +6,29 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class LogDto { public const string TableName = Constants.DatabaseSchema.Tables.Log; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + private const string UserIdColumnName = "userId"; + private const string NodeIdColumnName = "NodeId"; + private const string DatestampColumnName = "Datestamp"; + private const string HeaderColumnName = "logHeader"; private int? _userId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("userId")] + [Column(UserIdColumnName)] [ForeignKey(typeof(UserDto))] [NullSetting(NullSetting = NullSettings.Null)] public int? UserId { get => _userId == 0 ? null : _userId; set => _userId = value; } // return null if zero - [Column("NodeId")] + [Column(NodeIdColumnName)] [Index(IndexTypes.NonClustered, Name = "IX_umbracoLog")] public int NodeId { get; set; } @@ -36,14 +40,14 @@ internal sealed class LogDto [NullSetting(NullSetting = NullSettings.Null)] public string? EntityType { get; set; } - [Column("Datestamp")] + [Column(DatestampColumnName)] [Constraint(Default = SystemMethods.CurrentUTCDateTime)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_datestamp", ForColumns = "Datestamp,userId,NodeId")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_datestamp", ForColumns = $"{DatestampColumnName},{UserIdColumnName},{NodeIdColumnName}")] public DateTime Datestamp { get; set; } - [Column("logHeader")] + [Column(HeaderColumnName)] [Length(50)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_datestamp_logheader", ForColumns = "Datestamp,logHeader")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_datestamp_logheader", ForColumns = $"{DatestampColumnName},{HeaderColumnName}")] public string Header { get; set; } = null!; [Column("logComment")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs index 31c90765530c..b531201e02cd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LogViewerQueryDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class LogViewerQueryDto { public const string TableName = Constants.DatabaseSchema.Tables.LogViewerQuery; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs index 9d1baa939a0e..42ae25c94706 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LongRunningOperationDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal class LongRunningOperationDto { public const string TableName = Constants.DatabaseSchema.Tables.LongRunningOperation; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoLongRunningOperation", AutoIncrement = false)] public Guid Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs index 629d8e2fc294..247e234025aa 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaVersionDto.cs @@ -5,20 +5,22 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class MediaVersionDto { public const string TableName = Constants.DatabaseSchema.Tables.MediaVersion; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string PathColumnName = "path"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName, ForColumns = "id, path")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName, ForColumns = $"{PrimaryKeyColumnName}, {PathColumnName}")] public int Id { get; set; } - [Column("path")] + [Column(PathColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Path { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs index 957e3b148b29..576c35400828 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs @@ -5,16 +5,17 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class Member2MemberGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.Member2MemberGroup; - public const string PrimaryKeyName = "Member"; - public const string MemberGroupName = "MemberGroup"; + public const string PrimaryKeyColumnName = "Member"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyName}, {MemberGroupName}")] + private const string MemberGroupName = "MemberGroup"; + + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyColumnName}, {MemberGroupName}")] [ForeignKey(typeof(MemberDto))] public int Member { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs index ac92c951ae2f..f141fe6643c4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class MemberDto { private const string TableName = Constants.DatabaseSchema.Tables.Member; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentDto))] public int NodeId { get; set; } @@ -76,10 +76,10 @@ internal sealed class MemberDto public DateTime? LastPasswordChangeDate { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = "NodeId")] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentDto.NodeId))] public ContentDto ContentDto { get; set; } = null!; [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = "NodeId")] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentVersionDto.NodeId))] public ContentVersionDto ContentVersionDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs index 99aa11c864c9..be9a65f7be23 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberPropertyTypeDto.cs @@ -5,21 +5,21 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class MemberPropertyTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.MemberPropertyType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string NodeIdColumnName = "NodeId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] - [ForeignKey(typeof(ContentTypeDto), Column = NodeIdName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int NodeId { get; set; } [Column("propertytypeId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs index aae44b90491c..4b1e1a3c461c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs @@ -6,22 +6,28 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class NodeDto { public const string TableName = Constants.DatabaseSchema.Tables.Node; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const int NodeIdSeed = 1060; // Public constants to bind properties between DTOs - public const string IdColumnName = PrimaryKeyName; + public const string IdColumnName = PrimaryKeyColumnName; public const string KeyColumnName = Constants.DatabaseSchema.Columns.UniqueIdName; public const string ParentIdColumnName = "parentId"; public const string SortOrderColumnName = "sortOrder"; public const string TrashedColumnName = "trashed"; public const string NodeObjectTypeColumnName = "nodeObjectType"; public const string TextColumnName = "text"; + public const string PathColumnName = "path"; + public const string LevelColumnName = "level"; + public const string UserIdColumnName = "nodeUser"; + public const string CreateDateColumnName = "createDate"; + public const string UniqueIdColumnNameTypo = "uniqueID"; + private int? _userId; @@ -31,27 +37,27 @@ public class NodeDto [Column(KeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_UniqueId", IncludeColumns = "parentId,level,path,sortOrder,trashed,nodeUser,text,createDate")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_UniqueId", IncludeColumns = $"{ParentIdColumnName},{LevelColumnName},{PathColumnName},{SortOrderColumnName},{TrashedColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] [Constraint(Default = SystemMethods.NewGuid)] public Guid UniqueId { get; set; } [Column(ParentIdColumnName)] [ForeignKey(typeof(NodeDto))] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_parentId_nodeObjectType", ForColumns = "parentId,nodeObjectType", IncludeColumns = "trashed,nodeUser,level,path,sortOrder,uniqueID,text,createDate")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_parentId_nodeObjectType", ForColumns = $"{ParentIdColumnName},{NodeObjectTypeColumnName}", IncludeColumns = $"{TrashedColumnName},{UserIdColumnName},{LevelColumnName},{PathColumnName},{SortOrderColumnName},{UniqueIdColumnNameTypo},{TextColumnName},{CreateDateColumnName}")] public int ParentId { get; set; } // NOTE: This index is primarily for the nucache data lookup, see https://github.com/umbraco/Umbraco-CMS/pull/8365#issuecomment-673404177 - [Column("level")] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Level", ForColumns = "level,parentId,sortOrder,nodeObjectType,trashed", IncludeColumns = "nodeUser,path,uniqueId,createDate")] + [Column(LevelColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Level", ForColumns = $"{LevelColumnName},{ParentIdColumnName},{SortOrderColumnName},{NodeObjectTypeColumnName},{TrashedColumnName}", IncludeColumns = $"{UserIdColumnName},{PathColumnName},{KeyColumnName},{CreateDateColumnName}")] public short Level { get; set; } - [Column("path")] + [Column(PathColumnName)] [Length(150)] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Path")] public string Path { get; set; } = null!; [Column(SortOrderColumnName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType_trashed_sorted", ForColumns = "nodeObjectType,trashed,sortOrder,id", IncludeColumns = "uniqueID,parentId,level,path,nodeUser,text,createDate")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType_trashed_sorted", ForColumns = $"{NodeObjectTypeColumnName},{TrashedColumnName},{SortOrderColumnName},{IdColumnName}", IncludeColumns = $"{UniqueIdColumnNameTypo},{ParentIdColumnName},{LevelColumnName},{PathColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] public int SortOrder { get; set; } [Column(TrashedColumnName)] @@ -59,21 +65,21 @@ public class NodeDto [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Trashed")] public bool Trashed { get; set; } - [Column("nodeUser")] // TODO: db rename to 'createUserId' + [Column(UserIdColumnName)] // TODO: db rename to 'createUserId' [ForeignKey(typeof(UserDto))] [NullSetting(NullSetting = NullSettings.Null)] public int? UserId { get => _userId == 0 ? null : _userId; set => _userId = value; } // return null if zero - [Column("text")] + [Column(TextColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Text { get; set; } - [Column("nodeObjectType")] // TODO: db rename to 'objectType' + [Column(NodeObjectTypeColumnName)] // TODO: db rename to 'objectType' [NullSetting(NullSetting = NullSettings.Null)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType", ForColumns = "nodeObjectType,trashed", IncludeColumns = "uniqueId,parentId,level,path,sortOrder,nodeUser,text,createDate")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType", ForColumns = $"{NodeObjectTypeColumnName},{TrashedColumnName}", IncludeColumns = $"{UniqueIdColumnNameTypo},{ParentIdColumnName},{LevelColumnName},{PathColumnName},{SortOrderColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] public Guid? NodeObjectType { get; set; } - [Column("createDate")] + [Column(CreateDateColumnName)] [Constraint(Default = SystemMethods.CurrentUTCDateTime)] public DateTime CreateDate { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs index 123d8141ea39..f5c8634e449c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs @@ -6,41 +6,44 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class PropertyDataDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyData; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string PropertyTypeIdName = "propertyTypeId"; - public const string VersionIdName = "versionId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PropertyTypeIdColumnName = "propertyTypeId"; + public const string VersionIdColumnName = "versionId"; public const int VarcharLength = 512; public const int SegmentLength = 256; + private const string LanguageIdColumnName = "languageId"; + private const string SegmentColumnName = "segment"; + private const string ReferenceColumnName = "PropertyTypeId"; // differs in casing from PropertyTypeIdColumnName! private decimal? _decimalValue; // pk, not used at the moment (never updating) - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column(VersionIdName)] + [Column(VersionIdColumnName)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{PropertyTypeIdName},languageId,segment")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdColumnName},{PropertyTypeIdColumnName},{LanguageIdColumnName},{SegmentColumnName}")] public int VersionId { get; set; } - [Column(PropertyTypeIdName)] + [Column(PropertyTypeIdColumnName)] [ForeignKey(typeof(PropertyTypeDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_PropertyTypeId")] public int PropertyTypeId { get; set; } - [Column("languageId")] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] [NullSetting(NullSetting = NullSettings.Null)] public int? LanguageId { get; set; } - [Column("segment")] + [Column(SegmentColumnName)] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Segment")] [NullSetting(NullSetting = NullSettings.Null)] [Length(SegmentLength)] @@ -73,7 +76,7 @@ public decimal? DecimalValue public string? TextValue { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "PropertyTypeId")] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public PropertyTypeDto? PropertyTypeDto { get; set; } [Ignore] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs index bf0e0d47a447..7935d4606721 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs @@ -6,31 +6,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal class PropertyTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string DataTypeIdName = "dataTypeId"; - public const string ContentTypeIdName = "contentTypeId"; - public const string PropertyTypeGroupIdName = "propertyTypeGroupId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PropertyTypeGroupIdColumnName = "propertyTypeGroupId"; + public const string DataTypeIdColumnName = "dataTypeId"; + public const string ContentTypeIdColumnName = "contentTypeId"; private string? _alias; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 100)] public int Id { get; set; } - [Column(DataTypeIdName)] - [ForeignKey(typeof(DataTypeDto), Column = DataTypeDto.PrimaryKeyName)] + [Column(DataTypeIdColumnName)] + [ForeignKey(typeof(DataTypeDto), Column = DataTypeDto.PrimaryKeyColumnName)] public int DataTypeId { get; set; } - [Column(ContentTypeIdName)] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [Column(ContentTypeIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int ContentTypeId { get; set; } - [Column(PropertyTypeGroupIdName)] + [Column(PropertyTypeGroupIdColumnName)] [NullSetting(NullSetting = NullSettings.Null)] [ForeignKey(typeof(PropertyTypeGroupDto))] public int? PropertyTypeGroupId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs index e27019533120..a9f565b4918b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs @@ -6,27 +6,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class PropertyTypeGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string ContentTypeNodeIdName = "contenttypeNodeId"; - public const string UniqueIdName = "uniqueID"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string ContentTypeNodeIdColumnName = "contenttypeNodeId"; + public const string UniqueIdColumnName = "uniqueID"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 56)] public int Id { get; set; } - [Column(UniqueIdName)] + [Column(UniqueIdColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [Constraint(Default = SystemMethods.NewGuid)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsPropertyTypeGroupUniqueID")] public Guid UniqueId { get; set; } - [Column(ContentTypeNodeIdName)] - [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdName)] + [Column(ContentTypeNodeIdColumnName)] + [ForeignKey(typeof(ContentTypeDto), Column = ContentTypeDto.NodeIdColumnName)] public int ContentTypeNodeId { get; set; } [Column("type")] @@ -43,6 +43,6 @@ internal sealed class PropertyTypeGroupDto public int SortOrder { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.PropertyTypeGroupIdName)] + [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.PropertyTypeGroupIdColumnName)] public List PropertyTypeDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs index 3dec84a6cc56..8845301e4b34 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs @@ -4,14 +4,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class PropertyTypeGroupReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyTypeGroup; - public const string PrimaryKeyName = "PropertyTypeGroupId"; + public const string PrimaryKeyColumnName = "PropertyTypeGroupId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] public int? Id { get; set; } [Column("PropertyGroupName")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs index 5572efbf670b..842d4d9789ff 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs @@ -4,14 +4,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class PropertyTypeReadOnlyDto { public const string TableName = Constants.DatabaseSchema.Tables.PropertyType; - public const string PrimaryKeyName = "PropertyTypeId"; + public const string PrimaryKeyColumnName = "PropertyTypeId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] public int? Id { get; set; } [Column("dataTypeId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs index 1ae602dca9f7..d9b8023b238a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs @@ -5,12 +5,18 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class RedirectUrlDto { public const string TableName = Constants.DatabaseSchema.Tables.RedirectUrl; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + + private const string ContentKeyName = "contentKey"; + private const string CreateDateUtcName = "createDateUtc"; + private const string UrlName = "url"; + private const string CultureName = "culture"; + private const string UrlHashName = "urlHash"; public RedirectUrlDto() => CreateDateUtc = DateTime.UtcNow; @@ -20,35 +26,35 @@ internal sealed class RedirectUrlDto // problem is that the index key must be 900 bytes max. should we run without an index? done // some perfs comparisons, and running with an index on a hash is only slightly slower on // inserts, and much faster on reads, so... we have an index on a hash. - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoRedirectUrl", AutoIncrement = false)] public Guid Id { get; set; } [ResultColumn] public int ContentId { get; set; } - [Column("contentKey")] + [Column(ContentKeyName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [ForeignKey(typeof(NodeDto), Column = "uniqueId")] + [ForeignKey(typeof(NodeDto), Column = NodeDto.KeyColumnName)] public Guid ContentKey { get; set; } - [Column("createDateUtc")] + [Column(CreateDateUtcName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_culture_hash", ForColumns = "createDateUtc", IncludeColumns = "culture,url,urlHash,contentKey")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_culture_hash", ForColumns = CreateDateUtcName, IncludeColumns = $"{CultureName},{UrlName},{UrlHashName},{ContentKeyName}")] public DateTime CreateDateUtc { get; set; } - [Column("url")] + [Column(UrlName)] [NullSetting(NullSetting = NullSettings.NotNull)] [SpecialDbType(SpecialDbTypes.NVARCHARMAX)] public string Url { get; set; } = null!; - [Column("culture")] + [Column(CultureName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Culture { get; set; } - [Column("urlHash")] + [Column(UrlHashName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRedirectUrl", ForColumns = "urlHash, contentKey, culture, createDateUtc")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRedirectUrl", ForColumns = $"{UrlHashName}, {ContentKeyName}, {CultureName}, {CreateDateUtcName}")] [Length(40)] public string UrlHash { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs index c871dce6db93..b14c249d9271 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationDto.cs @@ -6,27 +6,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class RelationDto { public const string TableName = Constants.DatabaseSchema.Tables.Relation; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string RelationTypeColumnName = "relType"; + private const string ParentIdColumnName = "parentId"; + private const string ChildIdColumnName = "childId"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("parentId")] + [Column(ParentIdColumnName)] [ForeignKey(typeof(NodeDto), Name = "FK_umbracoRelation_umbracoNode")] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRelation_parentChildType", ForColumns = "parentId,childId,relType")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRelation_parentChildType", ForColumns = $"{ParentIdColumnName},{ChildIdColumnName},{RelationTypeColumnName}")] public int ParentId { get; set; } - [Column("childId")] + [Column(ChildIdColumnName)] [ForeignKey(typeof(NodeDto), Name = "FK_umbracoRelation_umbracoNode1")] public int ChildId { get; set; } - [Column("relType")] + [Column(RelationTypeColumnName)] [ForeignKey(typeof(RelationTypeDto))] public int RelationType { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs index c62c0877cdc3..16dc1af1fe28 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RelationTypeDto.cs @@ -5,16 +5,16 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class RelationTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.RelationType; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const int NodeIdSeed = 10; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = NodeIdSeed)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs index d1b973f2a2b7..f83965511981 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RepositoryCacheVersionDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class RepositoryCacheVersionDto { internal const string TableName = Constants.DatabaseSchema.Tables.RepositoryCacheVersion; - public const string PrimaryKeyName = "identifier"; + public const string PrimaryKeyColumnName = "identifier"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [Length(256)] [PrimaryKeyColumn(Name = "PK_umbracoRepositoryCacheVersion", AutoIncrement = false, Clustered = true)] public required string Identifier { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs index 99907652a085..7d37c68a9045 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ServerRegistrationDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class ServerRegistrationDto { public const string TableName = Constants.DatabaseSchema.Tables.Server; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs index 42b605ce91db..5f037fd292db 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TagDto.cs @@ -5,31 +5,35 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class TagDto { public const string TableName = Constants.DatabaseSchema.Tables.Tag; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string LanguageIdColumnName = "languageId"; + private const string GroupColumnName = "group"; + private const string TextColumnName = "tag"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("group")] + [Column(GroupColumnName)] [Length(100)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_languageId_group", ForColumns = "languageId,group", IncludeColumns = "id,tag")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_languageId_group", ForColumns = $"{LanguageIdColumnName},{GroupColumnName}", IncludeColumns = $"{PrimaryKeyColumnName},{TextColumnName}")] public string Group { get; set; } = null!; - [Column("languageId")] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] [NullSetting(NullSetting = NullSettings.Null)] public int? LanguageId { get; set; } - [Column("tag")] + [Column(TextColumnName)] [Length(200)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "group,tag,languageId", Name = "IX_cmsTags")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{GroupColumnName},{TextColumnName},{LanguageIdColumnName}", Name = "IX_cmsTags")] public string Text { get; set; } = null!; // [Column("key")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs index c6d25795f296..1d1e7a5892e4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TagRelationshipDto.cs @@ -5,26 +5,26 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class TagRelationshipDto { public const string TableName = Constants.DatabaseSchema.Tables.TagRelationship; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string PropertyTypeIdName = "propertyTypeId"; - public const string TagIdName = "tagId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PropertyTypeIdColumnName = "propertyTypeId"; + public const string TagIdColumnName = "tagId"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsTagRelationship", OnColumns = $"{PrimaryKeyName}, {PropertyTypeIdName}, {TagIdName}")] - [ForeignKey(typeof(ContentDto), Name = "FK_cmsTagRelationship_cmsContent", Column = ContentDto.PrimaryKeyName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_tagId_nodeId", ForColumns = $"{TagIdName},{PrimaryKeyName}", IncludeColumns = PropertyTypeIdName)] + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsTagRelationship", OnColumns = $"{PrimaryKeyColumnName}, {PropertyTypeIdColumnName}, {TagIdColumnName}")] + [ForeignKey(typeof(ContentDto), Name = "FK_cmsTagRelationship_cmsContent", Column = ContentDto.PrimaryKeyColumnName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_tagId_nodeId", ForColumns = $"{TagIdColumnName},{PrimaryKeyColumnName}", IncludeColumns = PropertyTypeIdColumnName)] public int NodeId { get; set; } - [Column(TagIdName)] + [Column(TagIdColumnName)] [ForeignKey(typeof(TagDto))] public int TagId { get; set; } - [Column(PropertyTypeIdName)] + [Column(PropertyTypeIdColumnName)] [ForeignKey(typeof(PropertyTypeDto), Name = "FK_cmsTagRelationship_cmsPropertyType")] public int PropertyTypeId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs index 640889b27584..d17f37b1b643 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs @@ -5,20 +5,19 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] internal sealed class TemplateDto { public const string TableName = Constants.DatabaseSchema.Tables.Template; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; - public const string ReferenceName = "NodeId"; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; + public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [Index(IndexTypes.UniqueNonClustered)] [ForeignKey(typeof(NodeDto), Name = "FK_cmsTemplate_umbracoNode")] public int NodeId { get; set; } @@ -29,6 +28,6 @@ internal sealed class TemplateDto public string? Alias { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = ReferenceName)] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(NodeDto.NodeId))] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs index 2c67f410f83f..cb7985697117 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TwoFactorLoginDto.cs @@ -6,24 +6,27 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] [ExplicitColumns] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] internal sealed class TwoFactorLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.TwoFactorLogin; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string UserOrMemberKeyColumnName = "userOrMemberKey"; + private const string ProviderNameColumnName = "providerName"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column("userOrMemberKey")] + [Column(UserOrMemberKeyColumnName)] [Index(IndexTypes.NonClustered)] public Guid UserOrMemberKey { get; set; } - [Column("providerName")] + [Column(ProviderNameColumnName)] [Length(400)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "providerName,userOrMemberKey", Name = "IX_" + TableName + "_ProviderName")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{ProviderNameColumnName},{UserOrMemberKeyColumnName}", Name = "IX_" + TableName + "_ProviderName")] public string ProviderName { get; set; } = null!; [Column("secret")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs index a7aedfff6bbf..3c773b4a6411 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs @@ -5,16 +5,17 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class User2ClientIdDto { public const string TableName = Constants.DatabaseSchema.Tables.User2ClientId; - public const string PrimaryKeyName = "userId"; - public const string ClientIdName = "clientId"; + public const string PrimaryKeyColumnName = "userId"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyName}, {ClientIdName}")] + private const string ClientIdName = "clientId"; + + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyColumnName}, {ClientIdName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs index f0bea89273e7..7eb08f636d7f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2NodeNotifyDto.cs @@ -5,21 +5,21 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class User2NodeNotifyDto { public const string TableName = Constants.DatabaseSchema.Tables.User2NodeNotify; - public const string PrimaryKeyName = "userId"; - public const string NodeIdName = Constants.DatabaseSchema.Columns.NodeIdName; + public const string PrimaryKeyColumnName = "userId"; + public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; public const string ActionColumnName = "action"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyName}, {NodeIdName}, {ActionColumnName}")] + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = $"{PrimaryKeyColumnName}, {NodeIdColumnName}, {ActionColumnName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2UserGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2UserGroupDto.cs index fd0da99f3981..89869377c839 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2UserGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2UserGroupDto.cs @@ -10,12 +10,15 @@ public class User2UserGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.User2UserGroup; - [Column("userId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_user2userGroup", OnColumns = "userId, userGroupId")] + private const string UserIdColumnName = "userId"; + private const string UserGroupIdColumnName = "userGroupId"; + + [Column(UserIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_user2userGroup", OnColumns = $"{UserIdColumnName}, {UserGroupIdColumnName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column("userGroupId")] + [Column(UserGroupIdColumnName)] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs index 28fb48185cbc..34ea0220d996 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDataDto.cs @@ -6,28 +6,32 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class UserDataDto { public const string TableName = Constants.DatabaseSchema.Tables.UserData; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; - [Column(PrimaryKeyName)] + private const string UserKeyColumnName = "userKey"; + private const string GroupColumnName = "group"; + private const string IdentifierColumnName = "identifier"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoUserDataDto", AutoIncrement = false)] public Guid Key { get; set; } - [Column("userKey")] + [Column(UserKeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserDataDto_UserKey_Group_Identifier", IncludeColumns = "group,identifier")] - [ForeignKey(typeof(UserDto), Column = "key")] + [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserDataDto_UserKey_Group_Identifier", IncludeColumns = $"{GroupColumnName},{IdentifierColumnName}")] + [ForeignKey(typeof(UserDto), Column = UserDto.KeyColumnName)] public Guid UserKey { get; set; } - [Column("group")] + [Column(GroupColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] public required string Group { get; set; } - [Column("identifier")] + [Column(IdentifierColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] public required string Identifier { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs index b01435e05de4..1687e28848f7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs @@ -6,12 +6,13 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class UserDto { public const string TableName = Constants.DatabaseSchema.Tables.User; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string KeyColumnName = "key"; public UserDto() { @@ -19,7 +20,7 @@ public UserDto() UserStartNodeDtos = new HashSet(); } - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_user")] public int Id { get; set; } @@ -27,7 +28,7 @@ public UserDto() [Constraint(Default = "0")] public bool Disabled { get; set; } - [Column("key")] + [Column(KeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [Constraint(Default = SystemMethods.NewGuid)] [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoUser_userKey")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs index a2df9218e3ce..da6becd2c5d3 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs @@ -5,16 +5,17 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] public class UserGroup2AppDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2App; - public const string PrimaryKeyName = "userGroupId"; - public const string AppAliasName = "app"; + public const string PrimaryKeyColumnName = "userGroupId"; - [Column(PrimaryKeyName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = $"{PrimaryKeyName}, {AppAliasName}")] + private const string AppAliasName = "app"; + + [Column(PrimaryKeyColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = $"{PrimaryKeyColumnName}, {AppAliasName}")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs index d1693b471621..5d2471d4482a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2GranularPermissionDto.cs @@ -5,25 +5,25 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class UserGroup2GranularPermissionDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2GranularPermission; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - public const string UniqueIdName = Constants.DatabaseSchema.Columns.UniqueIdName; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string UniqueIdColumnName = Constants.DatabaseSchema.Columns.UniqueIdName; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoUserGroup2GranularPermissionDto", AutoIncrement = true)] public int Id { get; set; } [Column("userGroupKey")] - [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UserGroupKey_UniqueId", IncludeColumns = UniqueIdName)] + [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UserGroupKey_UniqueId", IncludeColumns = UniqueIdColumnName)] [ForeignKey(typeof(UserGroupDto), Column = UserGroupDto.KeyColumnName)] public Guid UserGroupKey { get; set; } - [Column(UniqueIdName)] - [ForeignKey(typeof(NodeDto), Column = UniqueIdName)] + [Column(UniqueIdColumnName)] + [ForeignKey(typeof(NodeDto), Column = UniqueIdColumnName)] [NullSetting(NullSetting = NullSettings.Null)] [Index(IndexTypes.NonClustered, Name = "IX_umbracoUserGroup2GranularPermissionDto_UniqueId")] public Guid? UniqueId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs index 36ba42bb4ec8..cd2b40f5094d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs @@ -10,12 +10,15 @@ public class UserGroup2LanguageDto { public const string TableName = Cms.Core.Constants.DatabaseSchema.Tables.UserGroup2Language; - [Column("userGroupId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2language", OnColumns = "userGroupId, languageId")] + private const string UserGroupIdColumnName = "userGroupId"; + private const string LanguageIdColumnName = "languageId"; + + [Column(UserGroupIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2language", OnColumns = $"{UserGroupIdColumnName}, {LanguageIdColumnName}")] [ForeignKey(typeof(UserGroupDto), OnDelete = Rule.Cascade)] public int UserGroupId { get; set; } - [Column("languageId")] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto), OnDelete = Rule.Cascade)] public int LanguageId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodeDto.cs index afc21fb6f04d..772d7ac4707b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodeDto.cs @@ -11,12 +11,15 @@ internal sealed class UserGroup2NodeDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2Node; - [Column("userGroupId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_" + TableName, OnColumns = "userGroupId, nodeId")] + private const string UserGroupIdColumnName = "userGroupId"; + private const string NodeIdColumnName = "nodeId"; + + [Column(UserGroupIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_" + TableName, OnColumns = $"{UserGroupIdColumnName}, {NodeIdColumnName}")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } - [Column("nodeId")] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_nodeId")] public int NodeId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodePermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodePermissionDto.cs index d6c14c432b36..2c0e43e65598 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodePermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2NodePermissionDto.cs @@ -9,16 +9,20 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [ExplicitColumns] internal class UserGroup2NodePermissionDto { - [Column("userGroupId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUserGroup2NodePermission", OnColumns = "userGroupId, nodeId, permission")] + private const string UserGroupIdColumnName = "userGroupId"; + private const string NodeIdColumnName = "nodeId"; + private const string PermissionColumnName = "permission"; + + [Column(UserGroupIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUserGroup2NodePermission", OnColumns = $"{UserGroupIdColumnName}, {NodeIdColumnName}, {PermissionColumnName}")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } - [Column("nodeId")] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] [Index(IndexTypes.NonClustered, Name = "IX_umbracoUser2NodePermission_nodeId")] public int NodeId { get; set; } - [Column("permission")] + [Column(PermissionColumnName)] public string? Permission { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs index 14856d8db57c..3b4a86d5e99f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs @@ -5,23 +5,25 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class UserGroup2PermissionDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2Permission; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + private const string PermissionName = "permission"; + + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_userGroup2Permission", AutoIncrement = true)] public int Id { get; set; } [Column("userGroupKey")] - [Index(IndexTypes.NonClustered, IncludeColumns = "permission")] - [ForeignKey(typeof(UserGroupDto), Column = "key")] + [Index(IndexTypes.NonClustered, IncludeColumns = PermissionName)] + [ForeignKey(typeof(UserGroupDto), Column = UserGroupDto.KeyColumnName)] public Guid UserGroupKey { get; set; } - [Column("permission")] + [Column(PermissionName)] [Length(255)] public required string Permission { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs index 70cae402f08a..760c89e784d7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs @@ -6,12 +6,12 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName)] +[PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] public class UserGroupDto { public const string TableName = Constants.DatabaseSchema.Tables.UserGroup; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const string KeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameKey; public UserGroupDto() @@ -22,7 +22,7 @@ public UserGroupDto() UserGroup2GranularPermissionDtos = new List(); } - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(IdentitySeed = 6)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs index 9899741bec46..f0ce1e9f43de 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserLoginDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = false)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = false)] [ExplicitColumns] internal sealed class UserLoginDto { public const string TableName = Constants.DatabaseSchema.Tables.UserLogin; - public const string PrimaryKeyName = "sessionId"; + public const string PrimaryKeyColumnName = "sessionId"; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] public Guid SessionId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs index a4c082b3d104..9b3ea6daad55 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserStartNodeDto.cs @@ -5,12 +5,16 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class UserStartNodeDto : IEquatable { public const string TableName = Constants.DatabaseSchema.Tables.UserStartNode; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + + private const string UserIdColumnName = "userId"; + private const string StartNodeColumnName = "startNode"; + private const string StartNodeTypeColumnName = "startNodeType"; public enum StartNodeTypeValue { @@ -18,23 +22,23 @@ public enum StartNodeTypeValue Media = 2, } - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_userStartNode")] public int Id { get; set; } - [Column("userId")] + [Column(UserIdColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column("startNode")] + [Column(StartNodeColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [ForeignKey(typeof(NodeDto))] public int StartNode { get; set; } - [Column("startNodeType")] + [Column(StartNodeTypeColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = "startNodeType, startNode, userId", Name = "IX_umbracoUserStartNode_startNodeType")] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{StartNodeTypeColumnName}, {StartNodeColumnName}, {UserIdColumnName}", Name = "IX_umbracoUserStartNode_startNodeType")] public int StartNodeType { get; set; } public static bool operator ==(UserStartNodeDto left, UserStartNodeDto right) => Equals(left, right); diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs index 71bbed5962fb..bab04877cbad 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs @@ -1,4 +1,4 @@ -using System.Data; +using System.Data; using NPoco; using Umbraco.Cms.Core; using Umbraco.Cms.Infrastructure.Persistence.DatabaseAnnotations; @@ -10,11 +10,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [ExplicitColumns] public class Webhook2ContentTypeKeysDto { - [Column("webhookId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_webhookEntityKey2Webhook", OnColumns = "webhookId, entityKey")] + private const string WebhookIdColumnName = "webhookId"; + private const string ContentTypeKeyColumnName = "entityKey"; + + [Column(WebhookIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_webhookEntityKey2Webhook", OnColumns = $"{WebhookIdColumnName}, {ContentTypeKeyColumnName}")] [ForeignKey(typeof(WebhookDto), OnDelete = Rule.Cascade)] public int WebhookId { get; set; } - [Column("entityKey")] + [Column(ContentTypeKeyColumnName)] public Guid ContentTypeKey { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs index d534cf4c36e3..614393883d99 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs @@ -10,11 +10,14 @@ public class Webhook2EventsDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook2Events; - [Column("webhookId")] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_webhookEvent2WebhookDto", OnColumns = "webhookId, event")] + private const string WebhookIdColumnName = "webhookId"; + private const string EventColumnName = "event"; + + [Column(WebhookIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_webhookEvent2WebhookDto", OnColumns = $"{WebhookIdColumnName}, {EventColumnName}")] [ForeignKey(typeof(WebhookDto), OnDelete = Rule.Cascade)] public int WebhookId { get; set; } - [Column("event")] + [Column(EventColumnName)] public string Event { get; set; } = string.Empty; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs index d7fbfba8b502..38717d72ba5a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs @@ -9,18 +9,19 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public class Webhook2HeadersDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook2Headers; - public const string KeyName = "Key"; - public const string ValueName = "Value"; - public const string WebhookIdName = "WebhookId"; - [Column(WebhookIdName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_headers2WebhookDto", OnColumns = $"{WebhookIdName}, {KeyName}")] + private const string WebhookIdColumnName = "webhookId"; + private const string KeyColumnName = "Key"; + private const string ValueColumnName = "Value"; + + [Column(WebhookIdColumnName)] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_headers2WebhookDto", OnColumns = $"{WebhookIdColumnName}, {KeyColumnName}")] [ForeignKey(typeof(WebhookDto), OnDelete = Rule.Cascade)] public int WebhookId { get; set; } - [Column(KeyName)] + [Column(KeyColumnName)] public string Key { get; set; } = string.Empty; - [Column(ValueName)] + [Column(ValueColumnName)] public string Value { get; set; } = string.Empty; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs index 0bcf0f645a03..33e52bb6909c 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs @@ -6,14 +6,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class WebhookDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs index 2a53acc41c17..d299f0eaf967 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookLogDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] internal sealed class WebhookLogDto { public const string TableName = Constants.DatabaseSchema.Tables.WebhookLog; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs index b3d63c5c90cb..9e524ba63fcd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs @@ -5,14 +5,14 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [TableName(TableName)] -[PrimaryKey(PrimaryKeyName, AutoIncrement = true)] +[PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] public class WebhookRequestDto { public const string TableName = Constants.DatabaseSchema.Tables.WebhookRequest; - public const string PrimaryKeyName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - [Column(PrimaryKeyName)] + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = true)] public int Id { get; set; } From 44e3d8d9cb5c6f8e8b049b0e7301887a3f0ad835 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Sat, 10 Jan 2026 14:26:07 +0100 Subject: [PATCH 11/20] fix database schema and ResultColumn reference names --- src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs | 2 +- src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs | 4 ++-- .../Persistence/Dtos/ContentTypeDto.cs | 2 +- .../Persistence/Dtos/ContentVersionDto.cs | 3 +-- src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs | 2 +- .../Persistence/Dtos/DictionaryDto.cs | 4 +--- src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs | 2 +- .../Persistence/Dtos/ExternalLoginTokenDto.cs | 2 +- src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs | 2 +- .../Persistence/Dtos/NavigationDto.cs | 2 +- src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs | 6 +++--- .../Persistence/Dtos/PropertyDataDto.cs | 2 +- .../Persistence/Dtos/PropertyTypeDto.cs | 2 +- .../Persistence/Dtos/PropertyTypeGroupDto.cs | 2 +- src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs | 2 +- src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs | 6 ++++-- src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs | 4 ++-- .../Repositories/Implement/ContentNavigationRepository.cs | 2 +- 18 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs index 9498b8d1c4d0..4ad897915490 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs @@ -39,6 +39,6 @@ internal sealed class AccessDto public DateTime UpdateDate { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = "AccessId")] + [Reference(ReferenceType.Many, ReferenceMemberName = nameof(AccessRuleDto.AccessId))] public List Rules { get; set; } = new(); } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs index 2d3c4d63bf1f..5910de3a6c08 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs @@ -23,13 +23,13 @@ public class ContentDto public int ContentTypeId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = PrimaryKeyColumnName)] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId))] public NodeDto NodeDto { get; set; } = null!; // although a content has many content versions, // they can only be loaded one by one (as several content), // so this here is a OneToOne reference [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = PrimaryKeyColumnName)] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentVersionDto.NodeId))] public ContentVersionDto ContentVersionDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs index 18d1476f05db..92f410d8f421 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs @@ -62,6 +62,6 @@ internal class ContentTypeDto public byte Variations { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "NodeId")] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId))] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs index e358a7b75600..6e42fd28e4b9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs @@ -19,7 +19,6 @@ public class ContentVersionDto private const string TextColumnName = "text"; private const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; private const string PreventCleanupColumnName = "preventCleanup"; - private const string ReferenceColumnName = "NodeId"; private int? _userId; @@ -56,7 +55,7 @@ public class ContentVersionDto public string? Text { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName, ReferenceMemberName = ReferenceColumnName)] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId), ReferenceMemberName = nameof(ContentDto.NodeId))] public ContentDto? ContentDto { get; set; } [Column(PreventCleanupColumnName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs index 6c840b808f89..1501d0163186 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs @@ -34,6 +34,6 @@ public class DataTypeDto public string? Configuration { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "NodeId")] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId))] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs index 8e020ddfb5a0..1cca784442b2 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs @@ -13,8 +13,6 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; public const string UniqueIdColumnName = "id"; - private const string ReferenceName = "UniqueId"; - [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } @@ -35,6 +33,6 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public string Key { get; set; } = null!; [ResultColumn] - [Reference(ReferenceType.Many, ColumnName = ReferenceName, ReferenceMemberName = ReferenceName)] + [Reference(ReferenceType.Many, ColumnName = nameof(this.UniqueId), ReferenceMemberName = nameof(LanguageTextDto.UniqueId))] public List LanguageTextDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs index 5da45a916a45..fb000b94a93e 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs @@ -44,7 +44,7 @@ public class DocumentDto // [NullSetting(NullSetting = NullSettings.Null)] // is documentVersionDto.TemplateId for the published version // public int? PublishTemplateId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = "NodeId")] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentDto.NodeId))] public ContentDto ContentDto { get; set; } = null!; // although a content has many content versions, diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs index acabe5623fb1..f13e7e620f01 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs @@ -41,6 +41,6 @@ internal sealed class ExternalLoginTokenDto public DateTime CreateDate { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.ExternalLoginId))] public ExternalLoginDto ExternalLoginDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs index 6eedeca27e5e..90db561a11d4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs @@ -10,7 +10,7 @@ internal sealed class MediaDto public int NodeId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = "NodeId")] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentDto.NodeId))] public ContentDto ContentDto { get; set; } = null!; [ResultColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NavigationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NavigationDto.cs index 617212c83da5..ecb6b430abec 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NavigationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NavigationDto.cs @@ -11,7 +11,7 @@ internal sealed class NavigationDto : INavigationModel public const string ContentTypeKeyColumnName = "contentTypeKey"; /// - [Column(NodeDto.IdColumnName)] + [Column(NodeDto.NodeIdColumnName)] public int Id { get; set; } /// diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs index 4b1e1a3c461c..67429f08a66a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs @@ -15,7 +15,7 @@ public class NodeDto public const int NodeIdSeed = 1060; // Public constants to bind properties between DTOs - public const string IdColumnName = PrimaryKeyColumnName; + public const string NodeIdColumnName = PrimaryKeyColumnName; public const string KeyColumnName = Constants.DatabaseSchema.Columns.UniqueIdName; public const string ParentIdColumnName = "parentId"; public const string SortOrderColumnName = "sortOrder"; @@ -31,7 +31,7 @@ public class NodeDto private int? _userId; - [Column(IdColumnName)] + [Column(NodeIdColumnName)] [PrimaryKeyColumn(IdentitySeed = NodeIdSeed)] public int NodeId { get; set; } @@ -57,7 +57,7 @@ public class NodeDto public string Path { get; set; } = null!; [Column(SortOrderColumnName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType_trashed_sorted", ForColumns = $"{NodeObjectTypeColumnName},{TrashedColumnName},{SortOrderColumnName},{IdColumnName}", IncludeColumns = $"{UniqueIdColumnNameTypo},{ParentIdColumnName},{LevelColumnName},{PathColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType_trashed_sorted", ForColumns = $"{NodeObjectTypeColumnName},{TrashedColumnName},{SortOrderColumnName},{NodeIdColumnName}", IncludeColumns = $"{UniqueIdColumnNameTypo},{ParentIdColumnName},{LevelColumnName},{PathColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] public int SortOrder { get; set; } [Column(TrashedColumnName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs index f5c8634e449c..4ffc9f72ef98 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs @@ -76,7 +76,7 @@ public decimal? DecimalValue public string? TextValue { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.PropertyTypeId))] public PropertyTypeDto? PropertyTypeDto { get; set; } [Ignore] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs index 7935d4606721..f0acb527f704 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs @@ -80,7 +80,7 @@ internal class PropertyTypeDto public byte Variations { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = "DataTypeId")] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.DataTypeId))] public DataTypeDto DataTypeDto { get; set; } = null!; [Column("UniqueId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs index a9f565b4918b..cc77286306fd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs @@ -43,6 +43,6 @@ internal sealed class PropertyTypeGroupDto public int SortOrder { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.PropertyTypeGroupIdColumnName)] + [Reference(ReferenceType.Many, ReferenceMemberName = nameof(PropertyTypeDto.PropertyTypeGroupIdColumnName))] public List PropertyTypeDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs index d17f37b1b643..c1b40ee8d81d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs @@ -28,6 +28,6 @@ internal sealed class TemplateDto public string? Alias { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(NodeDto.NodeId))] + [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId))] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs index 1687e28848f7..193811ca11dc 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserDto.cs @@ -14,6 +14,8 @@ public class UserDto public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const string KeyColumnName = "key"; + private const string ReferenceMemberColumnName = "UserId"; + public UserDto() { UserGroupDtos = new List(); @@ -119,10 +121,10 @@ public UserDto() public string? Avatar { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = "UserId")] + [Reference(ReferenceType.Many, ReferenceMemberName = ReferenceMemberColumnName)] public List UserGroupDtos { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = "UserId")] + [Reference(ReferenceType.Many, ReferenceMemberName = ReferenceMemberColumnName)] public HashSet UserStartNodeDtos { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs index 760c89e784d7..7043844a8061 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs @@ -82,11 +82,11 @@ public UserGroupDto() public int? StartMediaId { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = "UserGroupId")] + [Reference(ReferenceType.Many, ReferenceMemberName = nameof(UserGroup2AppDto.UserGroupId))] public List UserGroup2AppDtos { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = "UserGroupId")] + [Reference(ReferenceType.Many, ReferenceMemberName = nameof(UserGroup2LanguageDto.UserGroupId))] public List UserGroup2LanguageDtos { get; set; } [ResultColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentNavigationRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentNavigationRepository.cs index ce4592d1290e..2b162808cd54 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentNavigationRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentNavigationRepository.cs @@ -36,7 +36,7 @@ private IEnumerable FetchNavigationDtos(Guid objectTypeKey, bo Sql sql = AmbientScope.SqlContext.Sql() .Select( - $"n.{syntax.GetQuotedColumnName(NodeDto.IdColumnName)} as {syntax.GetQuotedColumnName(NodeDto.IdColumnName)}", + $"n.{syntax.GetQuotedColumnName(NodeDto.NodeIdColumnName)} as {syntax.GetQuotedColumnName(NodeDto.NodeIdColumnName)}", $"n.{syntax.GetQuotedColumnName(NodeDto.KeyColumnName)} as {syntax.GetQuotedColumnName(NodeDto.KeyColumnName)}", $"ctn.{syntax.GetQuotedColumnName(NodeDto.KeyColumnName)} as {syntax.GetQuotedColumnName(NavigationDto.ContentTypeKeyColumnName)}", $"n.{syntax.GetQuotedColumnName(NodeDto.ParentIdColumnName)} as {syntax.GetQuotedColumnName(NodeDto.ParentIdColumnName)}", From 8118a3f5e5e0be1e97877fb201518fc5baeb234c Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Sat, 10 Jan 2026 15:13:39 +0100 Subject: [PATCH 12/20] Update src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs Co-authored-by: Andy Butland --- .../Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs index 61ffd88ab5f8..80ab39703287 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeAllowedContentTypeDto.cs @@ -11,8 +11,7 @@ internal sealed class ContentTypeAllowedContentTypeDto { public const string TableName = Constants.DatabaseSchema.Tables.ContentChildType; - // ToDo: Here we have an incosistent column name in DatabaseSchema. It should be Constants.DatabaseSchema.Columns.PrimaryKeyNameId; ("id") - // For now we leave the databse schema as is to avoid breaking changes. + // To avoid any risk of casing bugs caused by inconsistencies between upgraded and new installs, we keep the casing "Id" here even though in other tables the usual casing is lower-case ("id"). public const string PrimaryKeyColumnName = "Id"; public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; public const string SortOrderColumnName = "SortOrder"; From 7e64ceb73eb457de956ffe3b6a3462c60846d178 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Sat, 10 Jan 2026 15:27:58 +0100 Subject: [PATCH 13/20] add comment from review --- src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs index 1cca784442b2..762809b9d3bd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; { public const string TableName = Constants.DatabaseSchema.Tables.DictionaryEntry; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - public const string UniqueIdColumnName = "id"; + public const string UniqueIdColumnName = "id"; // More commonly we use `uniqueId` for `uniqueidentifer` database fields, but it's correct for this table to use "id", as that's the name the field was given for this table when it was added. [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] From fd6465d55c8c6a2702c0f2c1bb96ee77a8b39393 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Sat, 10 Jan 2026 15:37:19 +0100 Subject: [PATCH 14/20] fix two reference column names --- .../Persistence/Dtos/ExternalLoginTokenDto.cs | 1 - src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs index f13e7e620f01..05b3fdb80aca 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs @@ -15,7 +15,6 @@ internal sealed class ExternalLoginTokenDto private const string ExternalLoginIdColumnName = "externalLoginId"; private const string NameColumnName = "name"; - private const string ReferenceColumnName = "ExternalLoginId"; [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs index 4ffc9f72ef98..3c2263ff293d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs @@ -19,7 +19,7 @@ internal sealed class PropertyDataDto private const string LanguageIdColumnName = "languageId"; private const string SegmentColumnName = "segment"; - private const string ReferenceColumnName = "PropertyTypeId"; // differs in casing from PropertyTypeIdColumnName! + private decimal? _decimalValue; // pk, not used at the moment (never updating) From 0e4a963df8ef5a8f7870581b01594e30dac0eb5c Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Sat, 10 Jan 2026 16:58:39 +0100 Subject: [PATCH 15/20] fix breaking change --- .../Persistence/Dtos/NavigationDto.cs | 2 +- .../Persistence/Dtos/NodeDto.cs | 11 ++++++++--- .../Implement/ContentNavigationRepository.cs | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NavigationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NavigationDto.cs index ecb6b430abec..617212c83da5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NavigationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NavigationDto.cs @@ -11,7 +11,7 @@ internal sealed class NavigationDto : INavigationModel public const string ContentTypeKeyColumnName = "contentTypeKey"; /// - [Column(NodeDto.NodeIdColumnName)] + [Column(NodeDto.IdColumnName)] public int Id { get; set; } /// diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs index 67429f08a66a..bac7adafcba1 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs @@ -15,7 +15,12 @@ public class NodeDto public const int NodeIdSeed = 1060; // Public constants to bind properties between DTOs - public const string NodeIdColumnName = PrimaryKeyColumnName; + + /// + /// This is actually represents NodeId but kept as Id for backward compatibility. + /// + public const string IdColumnName = PrimaryKeyColumnName; + public const string KeyColumnName = Constants.DatabaseSchema.Columns.UniqueIdName; public const string ParentIdColumnName = "parentId"; public const string SortOrderColumnName = "sortOrder"; @@ -31,7 +36,7 @@ public class NodeDto private int? _userId; - [Column(NodeIdColumnName)] + [Column(IdColumnName)] [PrimaryKeyColumn(IdentitySeed = NodeIdSeed)] public int NodeId { get; set; } @@ -57,7 +62,7 @@ public class NodeDto public string Path { get; set; } = null!; [Column(SortOrderColumnName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType_trashed_sorted", ForColumns = $"{NodeObjectTypeColumnName},{TrashedColumnName},{SortOrderColumnName},{NodeIdColumnName}", IncludeColumns = $"{UniqueIdColumnNameTypo},{ParentIdColumnName},{LevelColumnName},{PathColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType_trashed_sorted", ForColumns = $"{NodeObjectTypeColumnName},{TrashedColumnName},{SortOrderColumnName},{IdColumnName}", IncludeColumns = $"{UniqueIdColumnNameTypo},{ParentIdColumnName},{LevelColumnName},{PathColumnName},{UserIdColumnName},{TextColumnName},{CreateDateColumnName}")] public int SortOrder { get; set; } [Column(TrashedColumnName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentNavigationRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentNavigationRepository.cs index 2b162808cd54..ce4592d1290e 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentNavigationRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentNavigationRepository.cs @@ -36,7 +36,7 @@ private IEnumerable FetchNavigationDtos(Guid objectTypeKey, bo Sql sql = AmbientScope.SqlContext.Sql() .Select( - $"n.{syntax.GetQuotedColumnName(NodeDto.NodeIdColumnName)} as {syntax.GetQuotedColumnName(NodeDto.NodeIdColumnName)}", + $"n.{syntax.GetQuotedColumnName(NodeDto.IdColumnName)} as {syntax.GetQuotedColumnName(NodeDto.IdColumnName)}", $"n.{syntax.GetQuotedColumnName(NodeDto.KeyColumnName)} as {syntax.GetQuotedColumnName(NodeDto.KeyColumnName)}", $"ctn.{syntax.GetQuotedColumnName(NodeDto.KeyColumnName)} as {syntax.GetQuotedColumnName(NavigationDto.ContentTypeKeyColumnName)}", $"n.{syntax.GetQuotedColumnName(NodeDto.ParentIdColumnName)} as {syntax.GetQuotedColumnName(NodeDto.ParentIdColumnName)}", From 327f8dcbf300f8fddf296e10a311cf945d50183d Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Sat, 10 Jan 2026 16:59:48 +0100 Subject: [PATCH 16/20] fix typo --- src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs index bac7adafcba1..c8fc81dd5b41 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/NodeDto.cs @@ -17,7 +17,7 @@ public class NodeDto // Public constants to bind properties between DTOs /// - /// This is actually represents NodeId but kept as Id for backward compatibility. + /// This actually represents NodeId but kept as Id for backward compatibility. /// public const string IdColumnName = PrimaryKeyColumnName; From afeab7fae1b21de737b090e45f1aa50471f9874b Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Mon, 12 Jan 2026 17:17:04 +0100 Subject: [PATCH 17/20] Remove unnecessary attributes --- .../Implement/TrackedReferencesRepository.cs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs index 16b13612a515..62889041adc4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs @@ -445,36 +445,32 @@ private Sql GetInnerUnionSql() return innerUnionSql; } + /// + /// Represents a data transfer object used to encapsulate information for union operations between entities. + /// + /// + /// It does NOT need NPoco Column attributes as it is used internally within SQL queries. + /// private sealed class UnionHelperDto { - [Column("id")] public int Id { get; set; } - [Column("otherId")] public int OtherId { get; set; } - [Column("key")] public Guid Key { get; set; } - [Column("trashed")] public bool Trashed { get; set; } - [Column("nodeObjectType")] public Guid NodeObjectType { get; set; } - [Column("otherKey")] public Guid OtherKey { get; set; } - [Column("alias")] public string? Alias { get; set; } - [Column("name")] public string? Name { get; set; } - [Column("isDependency")] public bool IsDependency { get; set; } - [Column("dual")] public bool Dual { get; set; } } From 143adb91d94baec152f6d8f0f4a5268633895c8e Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Tue, 13 Jan 2026 12:12:55 +0100 Subject: [PATCH 18/20] mark 2 unsused DTO classes as obsolete --- .../Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs | 1 + .../Persistence/Dtos/PropertyTypeReadOnlyDto.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs index 8845301e4b34..05132b39ef31 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupReadOnlyDto.cs @@ -3,6 +3,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; +[Obsolete("This class is obsolete and should be removed in future versions.")] [TableName(TableName)] [PrimaryKey(PrimaryKeyColumnName, AutoIncrement = true)] [ExplicitColumns] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs index 842d4d9789ff..d95a2420cd44 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeReadOnlyDto.cs @@ -3,6 +3,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; +[Obsolete("This class is obsolete and should be removed in future versions.")] [TableName(TableName)] [PrimaryKey(PrimaryKeyColumnName)] [ExplicitColumns] From 58b38a0ebf5b1a95a948ad13282c259ca49763fb Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Tue, 13 Jan 2026 16:05:54 +0100 Subject: [PATCH 19/20] reverted change of class UnionHelperDto adding [Column("...")] attributes again, because some integration tests for PostgreSQL provider fail without them. Again a case sensitivty issue. --- .../Implement/TrackedReferencesRepository.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs index 62889041adc4..16b13612a515 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TrackedReferencesRepository.cs @@ -445,32 +445,36 @@ private Sql GetInnerUnionSql() return innerUnionSql; } - /// - /// Represents a data transfer object used to encapsulate information for union operations between entities. - /// - /// - /// It does NOT need NPoco Column attributes as it is used internally within SQL queries. - /// private sealed class UnionHelperDto { + [Column("id")] public int Id { get; set; } + [Column("otherId")] public int OtherId { get; set; } + [Column("key")] public Guid Key { get; set; } + [Column("trashed")] public bool Trashed { get; set; } + [Column("nodeObjectType")] public Guid NodeObjectType { get; set; } + [Column("otherKey")] public Guid OtherKey { get; set; } + [Column("alias")] public string? Alias { get; set; } + [Column("name")] public string? Name { get; set; } + [Column("isDependency")] public bool IsDependency { get; set; } + [Column("dual")] public bool Dual { get; set; } } From 8f6e406fc292877129086f526a957e3316dc41d4 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Thu, 15 Jan 2026 10:22:51 +0100 Subject: [PATCH 20/20] replace nameof reference names, make all column name const consistent --- .../Persistence/Dtos/AccessDto.cs | 2 +- .../Persistence/Dtos/AccessRuleDto.cs | 15 ++++++------ .../Persistence/Dtos/ContentDto.cs | 6 +++-- .../Persistence/Dtos/ContentTypeDto.cs | 4 +++- .../Dtos/ContentVersionCultureVariationDto.cs | 23 +++++++++--------- .../Persistence/Dtos/ContentVersionDto.cs | 4 +++- .../Persistence/Dtos/DataTypeDto.cs | 4 +++- .../Persistence/Dtos/DictionaryDto.cs | 4 +++- .../Dtos/DocumentCultureVariationDto.cs | 10 ++++---- .../Persistence/Dtos/DocumentDto.cs | 3 +-- .../Persistence/Dtos/DocumentVersionDto.cs | 8 +++---- .../Persistence/Dtos/ExternalLoginTokenDto.cs | 4 +++- .../Persistence/Dtos/LanguageTextDto.cs | 12 ++++++---- .../Persistence/Dtos/MediaDto.cs | 2 +- .../Persistence/Dtos/Member2MemberGroupDto.cs | 6 ++--- .../Persistence/Dtos/MemberDto.cs | 4 ++-- .../Persistence/Dtos/PropertyDataDto.cs | 4 +++- .../Persistence/Dtos/PropertyTypeDto.cs | 5 +++- .../Persistence/Dtos/PropertyTypeGroupDto.cs | 2 +- .../Persistence/Dtos/RedirectUrlDto.cs | 24 +++++++++---------- .../Persistence/Dtos/TemplateDto.cs | 4 +++- .../Persistence/Dtos/User2ClientIdDto.cs | 6 ++--- .../Persistence/Dtos/UserGroup2AppDto.cs | 8 ++++--- .../Persistence/Dtos/UserGroup2LanguageDto.cs | 2 ++ .../Dtos/UserGroup2PermissionDto.cs | 6 ++--- .../Persistence/Dtos/UserGroupDto.cs | 4 ++-- .../Dtos/Webhook2ContentTypeKeysDto.cs | 2 ++ .../Persistence/Dtos/Webhook2EventsDto.cs | 2 ++ .../Persistence/Dtos/Webhook2HeadersDto.cs | 2 ++ .../Persistence/Dtos/WebhookDto.cs | 6 ++--- 30 files changed, 110 insertions(+), 78 deletions(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs index 4ad897915490..30d9268821d7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs @@ -39,6 +39,6 @@ internal sealed class AccessDto public DateTime UpdateDate { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = nameof(AccessRuleDto.AccessId))] + [Reference(ReferenceType.Many, ReferenceMemberName = AccessRuleDto.AccessIdColumnName)] public List Rules { get; set; } = new(); } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs index 2ac8cb73b912..0e83d57848af 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessRuleDto.cs @@ -13,23 +13,24 @@ internal sealed class AccessRuleDto public const string TableName = Constants.DatabaseSchema.Tables.AccessRule; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - private const string RuleValueName = "ruleValue"; - private const string RuleTypeName = "ruleType"; - private const string AssessIdName = "accessId"; + internal const string AccessIdColumnName = "accessId"; + + private const string RuleValueColumnName = "ruleValue"; + private const string RuleTypeColumnName = "ruleType"; [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_umbracoAccessRule", AutoIncrement = false)] public Guid Id { get; set; } - [Column(AssessIdName)] + [Column(AccessIdColumnName)] [ForeignKey(typeof(AccessDto), Name = "FK_umbracoAccessRule_umbracoAccess_id")] public Guid AccessId { get; set; } - [Column(RuleValueName)] - [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{RuleValueName},{RuleTypeName},{AssessIdName}", Name = "IX_umbracoAccessRule")] + [Column(RuleValueColumnName)] + [Index(IndexTypes.UniqueNonClustered, ForColumns = $"{RuleValueColumnName},{RuleTypeColumnName},{AccessIdColumnName}", Name = "IX_umbracoAccessRule")] public string? RuleValue { get; set; } - [Column(RuleTypeName)] + [Column(RuleTypeColumnName)] public string? RuleType { get; set; } [Column("createDate")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs index 5910de3a6c08..5884bbef5b4a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentDto.cs @@ -13,6 +13,8 @@ public class ContentDto public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; public const string ContentTypeIdColumnName = "contentTypeId"; + internal const string ReferenceMemberName = "NodeId"; // should be ContentVersionDto.NodeIdColumnName, but for database compatibility we keep it like this + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(NodeDto))] @@ -23,13 +25,13 @@ public class ContentDto public int ContentTypeId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId))] + [Reference(ReferenceType.OneToOne, ColumnName = PrimaryKeyColumnName)] public NodeDto NodeDto { get; set; } = null!; // although a content has many content versions, // they can only be loaded one by one (as several content), // so this here is a OneToOne reference [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentVersionDto.NodeId))] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = ReferenceMemberName)] public ContentVersionDto ContentVersionDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs index 92f410d8f421..91b6a3647fc6 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs @@ -13,6 +13,8 @@ internal class ContentTypeDto public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + internal const string ReferenceColumnName = "NodeId"; // should be ContentTypeDto.NodeIdColumnName, but for database compatibility we keep it like this + private string? _alias; // Public constants to bind properties between DTOs @@ -62,6 +64,6 @@ internal class ContentTypeDto public byte Variations { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId))] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs index 6e85c2486494..97dbb2c34713 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionCultureVariationDto.cs @@ -12,23 +12,24 @@ internal sealed class ContentVersionCultureVariationDto public const string TableName = Constants.DatabaseSchema.Tables.ContentVersionCultureVariation; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - private const string LanguageIdName = "languageId"; - private const string VersionIdName = "versionId"; - private const string UpdateUserIdName = "availableUserId"; - private const string UpdateDateName = "date"; - private const string NameName = "name"; + private const string LanguageIdColumnName = "languageId"; + private const string VersionIdColumnName = "versionId"; + private const string UpdateUserIdColumnName = "availableUserId"; + private const string UpdateDateColumnName = "date"; + private const string NameColumnName = "name"; + private int? _updateUserId; [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column(VersionIdName)] + [Column(VersionIdColumnName)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdName},{LanguageIdName}", IncludeColumns = $"{PrimaryKeyColumnName},{NameName},{UpdateDateName},{UpdateUserIdName}")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_VersionId", ForColumns = $"{VersionIdColumnName},{LanguageIdColumnName}", IncludeColumns = $"{PrimaryKeyColumnName},{NameColumnName},{UpdateDateColumnName},{UpdateUserIdColumnName}")] public int VersionId { get; set; } - [Column(LanguageIdName)] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] public int LanguageId { get; set; } @@ -37,13 +38,13 @@ internal sealed class ContentVersionCultureVariationDto [Ignore] public string? Culture { get; set; } - [Column(NameName)] + [Column(NameColumnName)] public string? Name { get; set; } - [Column(UpdateDateName)] // TODO: db rename to 'updateDate' + [Column(UpdateDateColumnName)] // TODO: db rename to 'updateDate' public DateTime UpdateDate { get; set; } - [Column(UpdateUserIdName)] // TODO: db rename to 'updateDate' + [Column(UpdateUserIdColumnName)] // TODO: db rename to 'updateDate' [ForeignKey(typeof(UserDto))] [NullSetting(NullSetting = NullSettings.Null)] public int? UpdateUserId diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs index 6e42fd28e4b9..cf14295222a4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ContentVersionDto.cs @@ -13,6 +13,8 @@ public class ContentVersionDto public const string TableName = Constants.DatabaseSchema.Tables.ContentVersion; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + internal const string ReferenceColumnName = "NodeId"; // should be ContentTypeDto.NodeIdColumnName, but for database compatibility we keep it like this + private const string UserIdColumnName = "userId"; private const string VersionDateColumnName = "versionDate"; private const string CurrentColumnName = "current"; @@ -55,7 +57,7 @@ public class ContentVersionDto public string? Text { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId), ReferenceMemberName = nameof(ContentDto.NodeId))] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName, ReferenceMemberName = ContentDto.ReferenceMemberName)] public ContentDto? ContentDto { get; set; } [Column(PreventCleanupColumnName)] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs index 1501d0163186..9ab3f834c0d5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DataTypeDto.cs @@ -12,6 +12,8 @@ public class DataTypeDto public const string TableName = Constants.DatabaseSchema.Tables.DataType; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + internal const string ReferenceColumnName = "NodeId"; // should be DataTypeDto.PrimaryKeyColumnName, but for database compatibility we keep it like this + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(NodeDto))] @@ -34,6 +36,6 @@ public class DataTypeDto public string? Configuration { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId))] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs index 762809b9d3bd..415ccc9f54b9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs @@ -13,6 +13,8 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; public const string UniqueIdColumnName = "id"; // More commonly we use `uniqueId` for `uniqueidentifer` database fields, but it's correct for this table to use "id", as that's the name the field was given for this table when it was added. + internal const string ReferenceColumnName = "UniqueId"; // should be DataTypeDto.PrimaryKeyColumnName, but for database compatibility we keep it like this + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } @@ -33,6 +35,6 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; public string Key { get; set; } = null!; [ResultColumn] - [Reference(ReferenceType.Many, ColumnName = nameof(this.UniqueId), ReferenceMemberName = nameof(LanguageTextDto.UniqueId))] + [Reference(ReferenceType.Many, ColumnName = ReferenceColumnName, ReferenceMemberName = LanguageTextDto.ReferenceMemberName)] public List LanguageTextDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs index 2b9781c747f6..2d868f6bbaca 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentCultureVariationDto.cs @@ -15,19 +15,19 @@ internal sealed class DocumentCultureVariationDto // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; - private const string LanguageIdName = "languageId"; - private const string NodeIdName = "nodeId"; + private const string LanguageIdColumnName = "languageId"; + private const string NodeIdColumnName = "nodeId"; [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int Id { get; set; } - [Column(NodeIdName)] + [Column(NodeIdColumnName)] [ForeignKey(typeof(NodeDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = $"{NodeIdName},{LanguageIdName}")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_NodeId", ForColumns = $"{NodeIdColumnName},{LanguageIdColumnName}")] public int NodeId { get; set; } - [Column(LanguageIdName)] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto))] [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_LanguageId")] public int LanguageId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs index fb000b94a93e..83035aa37bf5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentDto.cs @@ -12,7 +12,6 @@ public class DocumentDto public const string TableName = Constants.DatabaseSchema.Tables.Document; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.NodeIdName; - // Public constants to bind properties between DTOs public const string PublishedColumnName = "published"; @@ -44,7 +43,7 @@ public class DocumentDto // [NullSetting(NullSetting = NullSettings.Null)] // is documentVersionDto.TemplateId for the published version // public int? PublishTemplateId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentDto.NodeId))] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = ContentDto.ReferenceMemberName)] public ContentDto ContentDto { get; set; } = null!; // although a content has many content versions, diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs index ef4992d7081c..1ff5e28e9287 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/DocumentVersionDto.cs @@ -13,21 +13,21 @@ public class DocumentVersionDto public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; public const string PublishedColumnName = "published"; - private const string TemplateIdName = "templateId"; + private const string TemplateIdColumnName = "templateId"; [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(AutoIncrement = false)] [ForeignKey(typeof(ContentVersionDto))] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = $"{PrimaryKeyColumnName},{PublishedColumnName}", IncludeColumns = TemplateIdName)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_id_published", ForColumns = $"{PrimaryKeyColumnName},{PublishedColumnName}", IncludeColumns = TemplateIdColumnName)] public int Id { get; set; } - [Column(TemplateIdName)] + [Column(TemplateIdColumnName)] [NullSetting(NullSetting = NullSettings.Null)] [ForeignKey(typeof(TemplateDto), Column = TemplateDto.NodeIdColumnName)] public int? TemplateId { get; set; } [Column(PublishedColumnName)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = PublishedColumnName, IncludeColumns = $"{PrimaryKeyColumnName},{TemplateIdName}")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_published", ForColumns = PublishedColumnName, IncludeColumns = $"{PrimaryKeyColumnName},{TemplateIdColumnName}")] public bool Published { get; set; } [ResultColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs index 05b3fdb80aca..f3ffd5ae6bda 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/ExternalLoginTokenDto.cs @@ -13,6 +13,8 @@ internal sealed class ExternalLoginTokenDto public const string TableName = Constants.DatabaseSchema.Tables.ExternalLoginToken; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; + internal const string ReferenceMemberName = "ExternalLoginId"; // should be ExternalLoginIdColumnName, but for database compatibility we keep it like this + private const string ExternalLoginIdColumnName = "externalLoginId"; private const string NameColumnName = "name"; @@ -40,6 +42,6 @@ internal sealed class ExternalLoginTokenDto public DateTime CreateDate { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.ExternalLoginId))] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceMemberName)] public ExternalLoginDto ExternalLoginDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs index 3038b61473ff..3c4222a5cb04 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/LanguageTextDto.cs @@ -12,19 +12,21 @@ public class LanguageTextDto public const string TableName = Constants.DatabaseSchema.Tables.DictionaryValue; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; - private const string LanguageIdName = "languageId"; - private const string UniqueIdName = "UniqueId"; + internal const string ReferenceMemberName = "UniqueId"; // for clarity in DictionaryDto reference + + private const string LanguageIdColumnName = "languageId"; + private const string UniqueIdColumnName = "UniqueId"; [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } - [Column(LanguageIdName)] + [Column(LanguageIdColumnName)] [ForeignKey(typeof(LanguageDto), Column = LanguageDto.PrimaryKeyColumnName)] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_languageId", ForColumns = $"{LanguageIdName},{UniqueIdName}")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_" + TableName + "_languageId", ForColumns = $"{LanguageIdColumnName},{UniqueIdColumnName}")] public int LanguageId { get; set; } - [Column(UniqueIdName)] + [Column(UniqueIdColumnName)] [ForeignKey(typeof(DictionaryDto), Column = DictionaryDto.UniqueIdColumnName)] public Guid UniqueId { get; set; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs index 90db561a11d4..bc3c43b3478a 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MediaDto.cs @@ -10,7 +10,7 @@ internal sealed class MediaDto public int NodeId { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentDto.NodeId))] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = ContentDto.ReferenceMemberName)] public ContentDto ContentDto { get; set; } = null!; [ResultColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs index 576c35400828..123db530aae4 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Member2MemberGroupDto.cs @@ -12,14 +12,14 @@ internal sealed class Member2MemberGroupDto public const string TableName = Constants.DatabaseSchema.Tables.Member2MemberGroup; public const string PrimaryKeyColumnName = "Member"; - private const string MemberGroupName = "MemberGroup"; + private const string MemberGroupColumnName = "MemberGroup"; [Column(PrimaryKeyColumnName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyColumnName}, {MemberGroupName}")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = $"{PrimaryKeyColumnName}, {MemberGroupColumnName}")] [ForeignKey(typeof(MemberDto))] public int Member { get; set; } - [Column(MemberGroupName)] + [Column(MemberGroupColumnName)] [ForeignKey(typeof(NodeDto))] public int MemberGroup { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs index f141fe6643c4..de1f498a9a9f 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/MemberDto.cs @@ -76,10 +76,10 @@ internal sealed class MemberDto public DateTime? LastPasswordChangeDate { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentDto.NodeId))] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = ContentDto.ReferenceMemberName)] public ContentDto ContentDto { get; set; } = null!; [ResultColumn] - [Reference(ReferenceType.OneToOne, ReferenceMemberName = nameof(ContentVersionDto.NodeId))] + [Reference(ReferenceType.OneToOne, ReferenceMemberName = ContentVersionDto.ReferenceColumnName)] public ContentVersionDto ContentVersionDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs index 3c2263ff293d..e048b9d91943 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs @@ -17,6 +17,8 @@ internal sealed class PropertyDataDto public const int VarcharLength = 512; public const int SegmentLength = 256; + internal const string ReferenceColumnName = "PropertyTypeId"; // should be PropertyTypeId, but for database compatibility we keep it like this + private const string LanguageIdColumnName = "languageId"; private const string SegmentColumnName = "segment"; @@ -76,7 +78,7 @@ public decimal? DecimalValue public string? TextValue { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.PropertyTypeId))] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public PropertyTypeDto? PropertyTypeDto { get; set; } [Ignore] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs index f0acb527f704..ce78ef03b828 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeDto.cs @@ -16,6 +16,9 @@ internal class PropertyTypeDto public const string DataTypeIdColumnName = "dataTypeId"; public const string ContentTypeIdColumnName = "contentTypeId"; + internal const string ReferenceColumnName = "DataTypeId"; // should be DataTypeIdColumnName, but for database compatibility we keep it like this + internal const string ReferencePropertyTypeGroupIdColumnName = "PropertyTypeGroupId"; // should be PropertyTypeGroupIdColumnName, but for database compatibility we keep it like this + private string? _alias; [Column(PrimaryKeyColumnName)] @@ -80,7 +83,7 @@ internal class PropertyTypeDto public byte Variations { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.DataTypeId))] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public DataTypeDto DataTypeDto { get; set; } = null!; [Column("UniqueId")] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs index cc77286306fd..883d65b17943 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/PropertyTypeGroupDto.cs @@ -43,6 +43,6 @@ internal sealed class PropertyTypeGroupDto public int SortOrder { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = nameof(PropertyTypeDto.PropertyTypeGroupIdColumnName))] + [Reference(ReferenceType.Many, ReferenceMemberName = PropertyTypeDto.ReferencePropertyTypeGroupIdColumnName)] public List PropertyTypeDtos { get; set; } = []; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs index d9b8023b238a..060fb14e87dd 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/RedirectUrlDto.cs @@ -12,11 +12,11 @@ internal sealed class RedirectUrlDto public const string TableName = Constants.DatabaseSchema.Tables.RedirectUrl; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - private const string ContentKeyName = "contentKey"; - private const string CreateDateUtcName = "createDateUtc"; - private const string UrlName = "url"; - private const string CultureName = "culture"; - private const string UrlHashName = "urlHash"; + private const string ContentKeyColumnName = "contentKey"; + private const string CreateDateUtcColumnName = "createDateUtc"; + private const string UrlColumnName = "url"; + private const string CultureColumnName = "culture"; + private const string UrlHashColumnName = "urlHash"; public RedirectUrlDto() => CreateDateUtc = DateTime.UtcNow; @@ -33,28 +33,28 @@ internal sealed class RedirectUrlDto [ResultColumn] public int ContentId { get; set; } - [Column(ContentKeyName)] + [Column(ContentKeyColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [ForeignKey(typeof(NodeDto), Column = NodeDto.KeyColumnName)] public Guid ContentKey { get; set; } - [Column(CreateDateUtcName)] + [Column(CreateDateUtcColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_culture_hash", ForColumns = CreateDateUtcName, IncludeColumns = $"{CultureName},{UrlName},{UrlHashName},{ContentKeyName}")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_culture_hash", ForColumns = CreateDateUtcColumnName, IncludeColumns = $"{CultureColumnName},{UrlColumnName},{UrlHashColumnName},{ContentKeyColumnName}")] public DateTime CreateDateUtc { get; set; } - [Column(UrlName)] + [Column(UrlColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] [SpecialDbType(SpecialDbTypes.NVARCHARMAX)] public string Url { get; set; } = null!; - [Column(CultureName)] + [Column(CultureColumnName)] [NullSetting(NullSetting = NullSettings.Null)] public string? Culture { get; set; } - [Column(UrlHashName)] + [Column(UrlHashColumnName)] [NullSetting(NullSetting = NullSettings.NotNull)] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRedirectUrl", ForColumns = $"{UrlHashName}, {ContentKeyName}, {CultureName}, {CreateDateUtcName}")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRedirectUrl", ForColumns = $"{UrlHashColumnName}, {ContentKeyColumnName}, {CultureColumnName}, {CreateDateUtcColumnName}")] [Length(40)] public string UrlHash { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs index c1b40ee8d81d..cbf127191aa3 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/TemplateDto.cs @@ -13,6 +13,8 @@ internal sealed class TemplateDto public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNamePk; public const string NodeIdColumnName = Constants.DatabaseSchema.Columns.NodeIdName; + internal const string ReferenceColumnName = "NodeId"; // should be NodeIdColumnName, but for database compatibility we keep it like this + [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn] public int PrimaryKey { get; set; } @@ -28,6 +30,6 @@ internal sealed class TemplateDto public string? Alias { get; set; } [ResultColumn] - [Reference(ReferenceType.OneToOne, ColumnName = nameof(this.NodeId))] + [Reference(ReferenceType.OneToOne, ColumnName = ReferenceColumnName)] public NodeDto NodeDto { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs index 3c773b4a6411..ca1f49e9d861 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/User2ClientIdDto.cs @@ -12,14 +12,14 @@ public class User2ClientIdDto public const string TableName = Constants.DatabaseSchema.Tables.User2ClientId; public const string PrimaryKeyColumnName = "userId"; - private const string ClientIdName = "clientId"; + private const string ClientIdColumnName = "clientId"; [Column(PrimaryKeyColumnName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyColumnName}, {ClientIdName}")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2ClientId", OnColumns = $"{PrimaryKeyColumnName}, {ClientIdColumnName}")] [ForeignKey(typeof(UserDto))] public int UserId { get; set; } - [Column(ClientIdName)] + [Column(ClientIdColumnName)] [Length(255)] public string? ClientId { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs index da6becd2c5d3..16f67224a2a9 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2AppDto.cs @@ -12,14 +12,16 @@ public class UserGroup2AppDto public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2App; public const string PrimaryKeyColumnName = "userGroupId"; - private const string AppAliasName = "app"; + internal const string ReferenceMemberName = "UserGroupId"; // should be PrimaryKeyColumnName, but for database compatibility we keep it like this + + private const string AppAliasColumnName = "app"; [Column(PrimaryKeyColumnName)] - [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = $"{PrimaryKeyColumnName}, {AppAliasName}")] + [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_userGroup2App", OnColumns = $"{PrimaryKeyColumnName}, {AppAliasColumnName}")] [ForeignKey(typeof(UserGroupDto))] public int UserGroupId { get; set; } - [Column(AppAliasName)] + [Column(AppAliasColumnName)] [Length(50)] public string AppAlias { get; set; } = null!; } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs index cd2b40f5094d..5d5b679094e8 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2LanguageDto.cs @@ -10,6 +10,8 @@ public class UserGroup2LanguageDto { public const string TableName = Cms.Core.Constants.DatabaseSchema.Tables.UserGroup2Language; + internal const string ReferenceMemberName = "UserGroupId"; // should be UserGroupIdColumnName, but for database compatibility we keep it like this + private const string UserGroupIdColumnName = "userGroupId"; private const string LanguageIdColumnName = "languageId"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs index 3b4a86d5e99f..13a11ac12f99 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroup2PermissionDto.cs @@ -12,18 +12,18 @@ public class UserGroup2PermissionDto public const string TableName = Constants.DatabaseSchema.Tables.UserGroup2Permission; public const string PrimaryKeyColumnName = Constants.DatabaseSchema.Columns.PrimaryKeyNameId; - private const string PermissionName = "permission"; + private const string PermissionColumnName = "permission"; [Column(PrimaryKeyColumnName)] [PrimaryKeyColumn(Name = "PK_userGroup2Permission", AutoIncrement = true)] public int Id { get; set; } [Column("userGroupKey")] - [Index(IndexTypes.NonClustered, IncludeColumns = PermissionName)] + [Index(IndexTypes.NonClustered, IncludeColumns = PermissionColumnName)] [ForeignKey(typeof(UserGroupDto), Column = UserGroupDto.KeyColumnName)] public Guid UserGroupKey { get; set; } - [Column(PermissionName)] + [Column(PermissionColumnName)] [Length(255)] public required string Permission { get; set; } } diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs index 7043844a8061..2fbf11fc69af 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/UserGroupDto.cs @@ -82,11 +82,11 @@ public UserGroupDto() public int? StartMediaId { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = nameof(UserGroup2AppDto.UserGroupId))] + [Reference(ReferenceType.Many, ReferenceMemberName = UserGroup2AppDto.ReferenceMemberName)] public List UserGroup2AppDtos { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = nameof(UserGroup2LanguageDto.UserGroupId))] + [Reference(ReferenceType.Many, ReferenceMemberName = UserGroup2LanguageDto.ReferenceMemberName)] public List UserGroup2LanguageDtos { get; set; } [ResultColumn] diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs index bab04877cbad..5e9746f911a5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2ContentTypeKeysDto.cs @@ -10,6 +10,8 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Dtos; [ExplicitColumns] public class Webhook2ContentTypeKeysDto { + internal const string ReferenceMemberName = "WebhookId"; // should be WebhookIdColumnName, but for database compatibility we keep it like this + private const string WebhookIdColumnName = "webhookId"; private const string ContentTypeKeyColumnName = "entityKey"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs index 614393883d99..7bb8c0a44c2e 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2EventsDto.cs @@ -10,6 +10,8 @@ public class Webhook2EventsDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook2Events; + internal const string ReferenceMemberName = "WebhookId"; // should be WebhookIdColumnName, but for database compatibility we keep it like this + private const string WebhookIdColumnName = "webhookId"; private const string EventColumnName = "event"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs index 38717d72ba5a..4f126504dc91 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/Webhook2HeadersDto.cs @@ -10,6 +10,8 @@ public class Webhook2HeadersDto { public const string TableName = Constants.DatabaseSchema.Tables.Webhook2Headers; + internal const string ReferenceMemberName = "WebhookId"; // should be WebhookIdColumnName, but for database compatibility we keep it like this + private const string WebhookIdColumnName = "webhookId"; private const string KeyColumnName = "Key"; private const string ValueColumnName = "Value"; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs index 33e52bb6909c..5c7dd0deba02 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookDto.cs @@ -39,15 +39,15 @@ internal sealed class WebhookDto public bool Enabled { get; set; } [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = nameof(Webhook2EventsDto.WebhookId))] + [Reference(ReferenceType.Many, ReferenceMemberName = Webhook2EventsDto.ReferenceMemberName)] public List Webhook2Events { get; set; } = new(); [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = nameof(Webhook2ContentTypeKeysDto.WebhookId))] + [Reference(ReferenceType.Many, ReferenceMemberName = Webhook2ContentTypeKeysDto.ReferenceMemberName)] public List Webhook2ContentTypeKeys { get; set; } = new(); [ResultColumn] - [Reference(ReferenceType.Many, ReferenceMemberName = nameof(Webhook2HeadersDto.WebhookId))] + [Reference(ReferenceType.Many, ReferenceMemberName = Webhook2HeadersDto.ReferenceMemberName)] public List Webhook2Headers { get; set; } = new(); }