From 28d9784c1b490fcf3461eb3c63e852545079bb03 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Tue, 4 Dec 2012 08:16:10 -0100 Subject: [PATCH] Reverting changes to DTOs to re-enable foreign key constraints. Adding temporary condition to executing database schema creation code to skip foreign key constraints for sql ce. --- src/Umbraco.Core/Models/Rdbms/AppTreeDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/ContentXmlDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs | 1 + .../Models/Rdbms/DataTypePreValueDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/DocumentDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/DocumentTypeDto.cs | 3 +++ src/Umbraco.Core/Models/Rdbms/DomainDto.cs | 1 + src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs | 1 + .../Models/Rdbms/Member2MemberGroupDto.cs | 2 ++ src/Umbraco.Core/Models/Rdbms/MemberDto.cs | 2 ++ src/Umbraco.Core/Models/Rdbms/MemberTypeDto.cs | 2 ++ src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs | 2 +- .../Models/Rdbms/PropertyTypeGroupDto.cs | 2 ++ src/Umbraco.Core/Models/Rdbms/RelationDto.cs | 3 +++ src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs | 1 + src/Umbraco.Core/Models/Rdbms/TagRelationshipDto.cs | 2 ++ src/Umbraco.Core/Models/Rdbms/TaskDto.cs | 3 +++ src/Umbraco.Core/Models/Rdbms/TemplateDto.cs | 1 + src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs | 2 ++ .../Models/Rdbms/User2NodePermissionDto.cs | 2 ++ ...atabaseCreation.cs => DatabaseSchemaCreation.cs} | 4 ++-- src/Umbraco.Core/Persistence/PetaPocoExtensions.cs | 13 ++++++++----- src/Umbraco.Core/Umbraco.Core.csproj | 2 +- 23 files changed, 44 insertions(+), 13 deletions(-) rename src/Umbraco.Core/Persistence/Migrations/Initial/{DatabaseCreation.cs => DatabaseSchemaCreation.cs} (95%) diff --git a/src/Umbraco.Core/Models/Rdbms/AppTreeDto.cs b/src/Umbraco.Core/Models/Rdbms/AppTreeDto.cs index 1667486ca9..cab38fa201 100644 --- a/src/Umbraco.Core/Models/Rdbms/AppTreeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/AppTreeDto.cs @@ -17,7 +17,7 @@ namespace Umbraco.Core.Models.Rdbms public bool Initialize { get; set; } [Column("treeSortOrder")] - public int SortOrder { get; set; } + public byte SortOrder { get; set; } [Column("appAlias")] [PrimaryKeyColumn(AutoIncrement = false, Clustered = true, Name = "PK_umbracoAppTree", OnColumns = "[appAlias], [treeAlias]")] diff --git a/src/Umbraco.Core/Models/Rdbms/ContentXmlDto.cs b/src/Umbraco.Core/Models/Rdbms/ContentXmlDto.cs index 9cb1da238d..44f461135c 100644 --- a/src/Umbraco.Core/Models/Rdbms/ContentXmlDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/ContentXmlDto.cs @@ -11,7 +11,7 @@ namespace Umbraco.Core.Models.Rdbms { [Column("nodeId")] [PrimaryKeyColumn(AutoIncrement = false)] - //[ForeignKey(typeof(ContentDto))] + [ForeignKey(typeof(ContentDto))] public int NodeId { get; set; } [Column("xml")] diff --git a/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs index db678dd3a1..66d2f059f2 100644 --- a/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs @@ -14,6 +14,7 @@ namespace Umbraco.Core.Models.Rdbms public int PrimaryKey { get; set; } [Column("nodeId")] + [ForeignKey(typeof(NodeDto))] [Index(IndexTypes.UniqueNonClustered)] public int DataTypeId { get; set; } diff --git a/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs b/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs index deb23a00c9..4f19d60abd 100644 --- a/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs @@ -13,7 +13,7 @@ namespace Umbraco.Core.Models.Rdbms public int Id { get; set; } [Column("datatypeNodeId")] - //[ForeignKey(typeof(DataTypeDto), Column = "nodeId")] + [ForeignKey(typeof(DataTypeDto), Column = "nodeId")] public int DataTypeNodeId { get; set; } [Column("value")] diff --git a/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs b/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs index 4eda74dcc9..59391c6551 100644 --- a/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs @@ -42,7 +42,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("templateId")] [NullSetting(NullSetting = NullSettings.Null)] - //[ForeignKey(typeof(TemplateDto))] + [ForeignKey(typeof(TemplateDto))] public int? TemplateId { get; set; } [Column("alias")] diff --git a/src/Umbraco.Core/Models/Rdbms/DocumentTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/DocumentTypeDto.cs index 09f3a03461..7fbf15f00f 100644 --- a/src/Umbraco.Core/Models/Rdbms/DocumentTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DocumentTypeDto.cs @@ -10,9 +10,12 @@ namespace Umbraco.Core.Models.Rdbms { [Column("contentTypeNodeId")] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsDocumentType", OnColumns = "contentTypeNodeId, templateNodeId")] + [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] + [ForeignKey(typeof(NodeDto))] public int ContentTypeNodeId { get; set; } [Column("templateNodeId")] + /*[ForeignKey(typeof(TemplateDto))]*/ public int TemplateNodeId { get; set; } [Column("IsDefault")] diff --git a/src/Umbraco.Core/Models/Rdbms/DomainDto.cs b/src/Umbraco.Core/Models/Rdbms/DomainDto.cs index e462007ca2..bd0bbc859c 100644 --- a/src/Umbraco.Core/Models/Rdbms/DomainDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DomainDto.cs @@ -18,6 +18,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("domainRootStructureID")] [NullSetting(NullSetting = NullSettings.Null)] + [ForeignKey(typeof(NodeDto))] public int? RootStructureId { get; set; } [Column("domainName")] diff --git a/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs b/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs index 8387da2581..729d0d97f3 100644 --- a/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs @@ -21,6 +21,7 @@ namespace Umbraco.Core.Models.Rdbms public short Type { get; set; } [Column("macro")] + [ForeignKey(typeof(MacroDto))] public int Macro { get; set; } [Column("macroPropertySortOrder")] diff --git a/src/Umbraco.Core/Models/Rdbms/Member2MemberGroupDto.cs b/src/Umbraco.Core/Models/Rdbms/Member2MemberGroupDto.cs index 66855681d5..89e07c25ea 100644 --- a/src/Umbraco.Core/Models/Rdbms/Member2MemberGroupDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/Member2MemberGroupDto.cs @@ -10,9 +10,11 @@ namespace Umbraco.Core.Models.Rdbms { [Column("Member")] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsMember2MemberGroup", OnColumns = "[Member], [MemberGroup]")] + [ForeignKey(typeof(MemberDto))] public int Member { get; set; } [Column("MemberGroup")] + [ForeignKey(typeof(NodeDto))] public int MemberGroup { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/MemberDto.cs b/src/Umbraco.Core/Models/Rdbms/MemberDto.cs index 5d64d79283..32e03f75d0 100644 --- a/src/Umbraco.Core/Models/Rdbms/MemberDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/MemberDto.cs @@ -10,6 +10,8 @@ namespace Umbraco.Core.Models.Rdbms { [Column("nodeId")] [PrimaryKeyColumn(AutoIncrement = false)] + [ForeignKey(typeof(ContentDto), Column = "nodeId")] + [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } [Column("Email")] diff --git a/src/Umbraco.Core/Models/Rdbms/MemberTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/MemberTypeDto.cs index 0791730ac9..c9432652af 100644 --- a/src/Umbraco.Core/Models/Rdbms/MemberTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/MemberTypeDto.cs @@ -13,6 +13,8 @@ namespace Umbraco.Core.Models.Rdbms public int PrimaryKey { get; set; } [Column("NodeId")] + [ForeignKey(typeof(NodeDto))] + [ForeignKey(typeof(ContentTypeDto), Column = "nodeId")] public int NodeId { get; set; } [Column("propertytypeId")] diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs index f85078e1bb..f125c6eaf3 100644 --- a/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs @@ -25,7 +25,7 @@ namespace Umbraco.Core.Models.Rdbms public Guid? VersionId { get; set; } [Column("propertytypeid")] - //[ForeignKey(typeof(PropertyTypeDto))] + [ForeignKey(typeof(PropertyTypeDto))] [Index(IndexTypes.NonClustered, Name = "IX_cmsPropertyData_3")] public int PropertyTypeId { get; set; } diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs index 61781a4285..0bbf3a891f 100644 --- a/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs @@ -15,6 +15,8 @@ namespace Umbraco.Core.Models.Rdbms [Column("parentGroupId")] [NullSetting(NullSetting = NullSettings.Null)] + //[Constraint(Default = "NULL")] + [ForeignKey(typeof(PropertyTypeGroupDto))] public int? ParentGroupId { get; set; } [Column("contenttypeNodeId")] diff --git a/src/Umbraco.Core/Models/Rdbms/RelationDto.cs b/src/Umbraco.Core/Models/Rdbms/RelationDto.cs index f3889dfd21..e204e42040 100644 --- a/src/Umbraco.Core/Models/Rdbms/RelationDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/RelationDto.cs @@ -14,12 +14,15 @@ namespace Umbraco.Core.Models.Rdbms public int Id { get; set; } [Column("parentId")] + [ForeignKey(typeof(NodeDto), Name = "FK_umbracoRelation_umbracoNode")] public int ParentId { get; set; } [Column("childId")] + [ForeignKey(typeof(NodeDto), Name = "FK_umbracoRelation_umbracoNode1")] public int ChildId { get; set; } [Column("relType")] + [ForeignKey(typeof(RelationTypeDto))] public int RelationType { get; set; } [Column("datetime")] diff --git a/src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs b/src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs index 89165a1920..23ba061b9b 100644 --- a/src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs @@ -10,6 +10,7 @@ namespace Umbraco.Core.Models.Rdbms { [Column("nodeId")] [PrimaryKeyColumn(AutoIncrement = false)] + [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } [Column("filename")] diff --git a/src/Umbraco.Core/Models/Rdbms/TagRelationshipDto.cs b/src/Umbraco.Core/Models/Rdbms/TagRelationshipDto.cs index 06e2fec3d1..e18cbeeb12 100644 --- a/src/Umbraco.Core/Models/Rdbms/TagRelationshipDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/TagRelationshipDto.cs @@ -10,9 +10,11 @@ namespace Umbraco.Core.Models.Rdbms { [Column("nodeId")] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_cmsTagRelationship", OnColumns = "[nodeId], [tagId]")] + [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } [Column("tagId")] + [ForeignKey(typeof(TagDto))] public int TagId { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/TaskDto.cs b/src/Umbraco.Core/Models/Rdbms/TaskDto.cs index 5187c601e9..4c38197d67 100644 --- a/src/Umbraco.Core/Models/Rdbms/TaskDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/TaskDto.cs @@ -22,12 +22,15 @@ namespace Umbraco.Core.Models.Rdbms public byte TaskTypeId { get; set; } [Column("nodeId")] + [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } [Column("parentUserId")] + [ForeignKey(typeof(UserDto), Name = "FK_cmsTask_umbracoUser")] public int ParentUserId { get; set; } [Column("userId")] + [ForeignKey(typeof(UserDto), Name = "FK_cmsTask_umbracoUser1")] public int UserId { get; set; } [Column("DateTime")] diff --git a/src/Umbraco.Core/Models/Rdbms/TemplateDto.cs b/src/Umbraco.Core/Models/Rdbms/TemplateDto.cs index ee24e4a0a6..a68704c361 100644 --- a/src/Umbraco.Core/Models/Rdbms/TemplateDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/TemplateDto.cs @@ -19,6 +19,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("master")] [NullSetting(NullSetting = NullSettings.Null)] + /*[ForeignKey(typeof(TemplateDto), Column = "nodeId")]*/ [ForeignKey(typeof(NodeDto), Name = "FK_cmsTemplate_cmsTemplate")] public int? Master { get; set; } diff --git a/src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs b/src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs index 30414fd0c2..2163ca32c3 100644 --- a/src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs @@ -10,9 +10,11 @@ namespace Umbraco.Core.Models.Rdbms { [Column("userId")] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodeNotify", OnColumns = "[userId], [nodeId], [action]")] + [ForeignKey(typeof(UserDto))] public int UserId { get; set; } [Column("nodeId")] + [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } [Column("action")] diff --git a/src/Umbraco.Core/Models/Rdbms/User2NodePermissionDto.cs b/src/Umbraco.Core/Models/Rdbms/User2NodePermissionDto.cs index 2354e887c4..5ddd6dd07a 100644 --- a/src/Umbraco.Core/Models/Rdbms/User2NodePermissionDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/User2NodePermissionDto.cs @@ -10,9 +10,11 @@ namespace Umbraco.Core.Models.Rdbms { [Column("userId")] [PrimaryKeyColumn(AutoIncrement = false, Name = "PK_umbracoUser2NodePermission", OnColumns = "[userId], [nodeId], [permission]")] + [ForeignKey(typeof(UserDto))] public int UserId { get; set; } [Column("nodeId")] + [ForeignKey(typeof(NodeDto))] public int NodeId { get; set; } [Column("permission")] diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseCreation.cs rename to src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs index 4108c928ce..5f39881e92 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseCreation.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs @@ -5,11 +5,11 @@ namespace Umbraco.Core.Persistence.Migrations.Initial /// /// Represents the initial database schema creation by running CreateTable for all DTOs against the db. /// - internal class DatabaseCreation + internal class DatabaseSchemaCreation { private readonly Database _database; - public DatabaseCreation(Database database) + public DatabaseSchemaCreation(Database database) { _database = database; } diff --git a/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs b/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs index 99ddc9e7b4..94251aec9b 100644 --- a/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs +++ b/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs @@ -72,11 +72,14 @@ namespace Umbraco.Core.Persistence //If any statements exists for the primary key execute them here if(!string.IsNullOrEmpty(createPrimaryKeySql)) db.Execute(new Sql(createPrimaryKeySql)); - - //Loop through foreignkey statements and execute sql - foreach (var sql in foreignSql) + + if (DatabaseContext.Current.ProviderName.Contains("SqlServerCe") == false) { - int createdFk = db.Execute(new Sql(sql)); + //Loop through foreignkey statements and execute sql + foreach (var sql in foreignSql) + { + int createdFk = db.Execute(new Sql(sql)); + } } //Loop through index statements and execute sql foreach (var sql in indexSql) @@ -130,7 +133,7 @@ namespace Umbraco.Core.Persistence LogHelper.Info("Initializing database schema creation"); - var creation = new DatabaseCreation(db); + var creation = new DatabaseSchemaCreation(db); creation.InitializeDatabaseSchema(); NewTable -= PetaPocoExtensions_NewTable; diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 8743b72568..d4df8a8350 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -193,7 +193,7 @@ - +