diff --git a/src/Umbraco.Core/Models/Rdbms/ContentTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/ContentTypeDto.cs
index 367df0c41a..8d163abf44 100644
--- a/src/Umbraco.Core/Models/Rdbms/ContentTypeDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/ContentTypeDto.cs
@@ -9,7 +9,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class ContentTypeDto
{
[Column("pk")]
- [PrimaryKeyColumn]
+ [PrimaryKeyColumn(IdentitySeed = 535)]
public int PrimaryKey { get; set; }
[Column("nodeId")]
diff --git a/src/Umbraco.Core/Models/Rdbms/ContentVersionDto.cs b/src/Umbraco.Core/Models/Rdbms/ContentVersionDto.cs
index 0b00980f55..4c832dc486 100644
--- a/src/Umbraco.Core/Models/Rdbms/ContentVersionDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/ContentVersionDto.cs
@@ -14,7 +14,7 @@ namespace Umbraco.Core.Models.Rdbms
public int Id { get; set; }
[Column("ContentId")]
- [ForeignKey(typeof(ContentDto))]
+ [ForeignKey(typeof(ContentDto), Column = "nodeId")]
public int NodeId { get; set; }
[Column("VersionId")]
diff --git a/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs
index 0a820ea216..b6859ba0ad 100644
--- a/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs
@@ -10,7 +10,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class DataTypeDto
{
[Column("pk")]
- [PrimaryKeyColumn]
+ [PrimaryKeyColumn(IdentitySeed = 39)]
public int PrimaryKey { get; set; }
[Column("nodeId")]
diff --git a/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs b/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs
index 7546c6faef..e6666ea6f0 100644
--- a/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs
@@ -9,7 +9,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class DataTypePreValueDto
{
[Column("id")]
- [PrimaryKeyColumn]
+ [PrimaryKeyColumn(IdentitySeed = 5)]
public int Id { get; set; }
[Column("datatypeNodeId")]
diff --git a/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs b/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs
index d1fdc496a3..51b818437f 100644
--- a/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs
@@ -10,7 +10,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class DocumentDto
{
[Column("nodeId")]
- [ForeignKey(typeof(ContentDto))]
+ [ForeignKey(typeof(ContentDto), Column = "nodeId")]
[ForeignKey(typeof(NodeDto))]
[Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsDocument", ForColumns = "nodeId, versionId")]
public int NodeId { get; set; }
diff --git a/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs b/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs
index 7599e48115..a634dca0a4 100644
--- a/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs
@@ -9,7 +9,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class LanguageDto
{
[Column("id")]
- [PrimaryKeyColumn]
+ [PrimaryKeyColumn(IdentitySeed = 2)]
public short Id { get; set; }
[Column("languageISOCode")]
diff --git a/src/Umbraco.Core/Models/Rdbms/MacroPropertyTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/MacroPropertyTypeDto.cs
index d1f926c230..3014f984e7 100644
--- a/src/Umbraco.Core/Models/Rdbms/MacroPropertyTypeDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/MacroPropertyTypeDto.cs
@@ -9,7 +9,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class MacroPropertyTypeDto
{
[Column("id")]
- [PrimaryKeyColumn]
+ [PrimaryKeyColumn(IdentitySeed = 26)]
public short Id { get; set; }
[Column("macroPropertyTypeAlias")]
diff --git a/src/Umbraco.Core/Models/Rdbms/NodeDto.cs b/src/Umbraco.Core/Models/Rdbms/NodeDto.cs
index a75a240311..abf1f01ca1 100644
--- a/src/Umbraco.Core/Models/Rdbms/NodeDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/NodeDto.cs
@@ -10,28 +10,23 @@ namespace Umbraco.Core.Models.Rdbms
internal class NodeDto
{
[Column("id")]
- [PrimaryKeyColumn(Name = "PK_structure")]
- //[DatabaseType(DatabaseTypes.Integer)]
+ [PrimaryKeyColumn(Name = "PK_structure", IdentitySeed = 1045)]
public int NodeId { get; set; }
[Column("trashed")]
- //[DatabaseType(DatabaseTypes.Bool)]
[Constraint(Default = "0")]
public bool Trashed { get; set; }
[Column("parentID")]
- //[DatabaseType(DatabaseTypes.Integer)]
[ForeignKey(typeof(NodeDto))]
[IndexAttribute(IndexTypes.NonClustered, Name = "IX_umbracoNodeParentId")]
public int ParentId { get; set; }
[Column("nodeUser")]
- //[DatabaseType(DatabaseTypes.Integer)]
[NullSetting(NullSetting = NullSettings.Null)]
public int? UserId { get; set; }
[Column("level")]
- //[DatabaseType(DatabaseTypes.SmallInteger)]
public short Level { get; set; }
[Column("path")]
@@ -39,27 +34,22 @@ namespace Umbraco.Core.Models.Rdbms
public string Path { get; set; }
[Column("sortOrder")]
- //[DatabaseType(DatabaseTypes.Integer)]
public int SortOrder { get; set; }
[Column("uniqueID")]
- //[DatabaseType(DatabaseTypes.UniqueIdentifier)]
[NullSetting(NullSetting = NullSettings.Null)]
public Guid? UniqueId { get; set; }
[Column("text")]
- //[DatabaseType(DatabaseTypes.Nvarchar, Length = 255)]
[NullSetting(NullSetting = NullSettings.Null)]
public string Text { get; set; }
[Column("nodeObjectType")]
- //[DatabaseType(DatabaseTypes.UniqueIdentifier)]
[NullSetting(NullSetting = NullSettings.Null)]
[IndexAttribute(IndexTypes.NonClustered, Name = "IX_umbracoNodeObjectType")]
public Guid? NodeObjectType { get; set; }
[Column("createDate")]
- //[DatabaseType(DatabaseTypes.DateTime)]
[Constraint(Default = "getdate()")]
public DateTime CreateDate { get; set; }
}
diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs
index ee973862af..f125c6eaf3 100644
--- a/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs
@@ -50,6 +50,7 @@ namespace Umbraco.Core.Models.Rdbms
[ResultColumn]
public PropertyTypeDto PropertyTypeDto { get; set; }
+ [Ignore]
public object GetValue
{
get
diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyTypeDto.cs
index 8662284508..319251bb61 100644
--- a/src/Umbraco.Core/Models/Rdbms/PropertyTypeDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/PropertyTypeDto.cs
@@ -9,7 +9,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class PropertyTypeDto
{
[Column("id")]
- [PrimaryKeyColumn]
+ [PrimaryKeyColumn(IdentitySeed = 28)]
public int Id { get; set; }
[Column("dataTypeId")]
diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs
index 6a70e665e8..0bbf3a891f 100644
--- a/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs
@@ -10,7 +10,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class PropertyTypeGroupDto
{
[Column("id")]
- [PrimaryKeyColumn]
+ [PrimaryKeyColumn(IdentitySeed = 6)]
public int Id { get; set; }
[Column("parentGroupId")]
diff --git a/src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs
index fee220a60e..d3268a14fb 100644
--- a/src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs
@@ -9,7 +9,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class UserTypeDto
{
[Column("id")]
- [PrimaryKeyColumn]
+ [PrimaryKeyColumn(IdentitySeed = 5)]
public short Id { get; set; }
[Column("userTypeAlias")]
diff --git a/src/Umbraco.Core/Persistence/DatabaseAnnotations/PrimaryKeyColumnAttribute.cs b/src/Umbraco.Core/Persistence/DatabaseAnnotations/PrimaryKeyColumnAttribute.cs
index e71648eb2c..62db23e3cc 100644
--- a/src/Umbraco.Core/Persistence/DatabaseAnnotations/PrimaryKeyColumnAttribute.cs
+++ b/src/Umbraco.Core/Persistence/DatabaseAnnotations/PrimaryKeyColumnAttribute.cs
@@ -18,19 +18,19 @@ namespace Umbraco.Core.Persistence.DatabaseAnnotations
}
///
- /// Gets or sets a boolean indicating whether the primary key is clustered
+ /// Gets or sets a boolean indicating whether the primary key is clustered.
///
/// Defaults to true
public bool Clustered { get; set; }
///
- /// Gets or sets a boolean indicating whether the primary key is auto incremented
+ /// Gets or sets a boolean indicating whether the primary key is auto incremented.
///
/// Defaults to true
public bool AutoIncrement { get; set; }
///
- /// Gets or sets the name of the PrimaryKey
+ /// Gets or sets the name of the PrimaryKey.
///
///
/// Overrides the default naming of a PrimaryKey constraint:
@@ -39,12 +39,21 @@ namespace Umbraco.Core.Persistence.DatabaseAnnotations
public string Name { get; set; }
///
- /// Gets or sets the names of the columns for this PrimaryKey
+ /// Gets or sets the names of the columns for this PrimaryKey.
///
///
/// Should only be used if the PrimaryKey spans over multiple columns.
/// Usage: [nodeId], [otherColumn]
///
public string OnColumns { get; set; }
+
+ ///
+ /// Gets or sets the Identity Seed, which is used for Sql Ce databases.
+ ///
+ ///
+ /// We'll only look for changes to seeding and apply them if the configured database
+ /// is an Sql Ce database.
+ ///
+ public int IdentitySeed { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs
index 5d0fbd4903..269acc6b44 100644
--- a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs
@@ -85,6 +85,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Execute(new Sql("SET IDENTITY_INSERT [umbracoNode] ON "));
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -1, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1", SortOrder = 0, UniqueId = new Guid("916724a5-173d-4619-b97e-b9de133dd6f5"), Text = "SYSTEM DATA: umbraco master root", NodeObjectType = new Guid("ea7d8624-4cfe-4578-a871-24aa946bf34d"), CreateDate = DateTime.UtcNow });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -20, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-20", SortOrder = 0, UniqueId = new Guid("0F582A79-1E41-4CF0-BFA0-76340651891A"), Text = "Recycle Bin", NodeObjectType = new Guid("01BB7FF2-24DC-4C0C-95A2-C24EF72BBAC8"), CreateDate = DateTime.UtcNow });
+ _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -21, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-21", SortOrder = 0, UniqueId = new Guid("BF7C7CBC-952F-4518-97A2-69E9C7B33842"), Text = "Recycle Bin", NodeObjectType = new Guid("CF3D8E34-1C1C-41e9-AE56-878B57B32113"), CreateDate = DateTime.UtcNow });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -92, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-92", SortOrder = 35, UniqueId = new Guid("f0bc4bfb-b499-40d6-ba86-058885a5178c"), Text = "Label", NodeObjectType = new Guid("30a2a501-1978-4ddb-a57b-f7efed43ba3c"), CreateDate = DateTime.UtcNow });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -90, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-90", SortOrder = 34, UniqueId = new Guid("84c6b441-31df-4ffe-b67e-67d5bc3ae65a"), Text = "Upload", NodeObjectType = new Guid("30a2a501-1978-4ddb-a57b-f7efed43ba3c"), CreateDate = DateTime.UtcNow });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -89, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-89", SortOrder = 33, UniqueId = new Guid("c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3"), Text = "Textbox multiple", NodeObjectType = new Guid("30a2a501-1978-4ddb-a57b-f7efed43ba3c"), CreateDate = DateTime.UtcNow });
@@ -112,7 +113,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1041, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1041", SortOrder = 2, UniqueId = new Guid("b6b73142-b9c1-4bf8-a16d-e1c23320b549"), Text = "Tags", NodeObjectType = new Guid("30a2a501-1978-4ddb-a57b-f7efed43ba3c"), CreateDate = DateTime.UtcNow });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1042, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1042", SortOrder = 2, UniqueId = new Guid("0a452bd5-83f9-4bc3-8403-1286e13fb77e"), Text = "Macro Container", NodeObjectType = new Guid("30a2a501-1978-4ddb-a57b-f7efed43ba3c"), CreateDate = DateTime.UtcNow });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1043, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1043", SortOrder = 2, UniqueId = new Guid("1df9f033-e6d4-451f-b8d2-e0cbc50a836f"), Text = "Image Cropper", NodeObjectType = new Guid("30a2a501-1978-4ddb-a57b-f7efed43ba3c"), CreateDate = DateTime.UtcNow });
- _database.Execute(new Sql("SET IDENTITY_INSERT [umbracoNode] OFF "));
+ _database.Execute(new Sql("SET IDENTITY_INSERT [umbracoNode] OFF;"));
transaction.Complete();
}
@@ -131,7 +132,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
{
_database.Execute(new Sql("SET IDENTITY_INSERT [umbracoUser] ON "));
_database.Insert("umbracoUser", "id", false, new UserDto { Id = 0, Disabled = false, NoConsole = false, Type = 1, ContentStartId = -1, MediaStartId = -1, UserName = "Administrator", Login = "admin", Password = "default", Email = "", UserLanguage = "en", DefaultPermissions = null, DefaultToLiveEditing = false });
- _database.Execute(new Sql("SET IDENTITY_INSERT [umbracoUser] OFF "));
+ _database.Execute(new Sql("SET IDENTITY_INSERT [umbracoUser] OFF;"));
transaction.Complete();
}
@@ -139,9 +140,10 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
private void CreateUmbracoUserTypeData()
{
- _database.Insert(new UserTypeDto { Id = 1, Alias = "admin", Name = "Administrators", DefaultPermissions = "CADMOSKTPIURZ:" });
- _database.Insert(new UserTypeDto { Id = 2, Alias = "writer", Name = "Writer", DefaultPermissions = "CAH:" });
- _database.Insert(new UserTypeDto { Id = 3, Alias = "editor", Name = "Editors", DefaultPermissions = "CADMOSKTPUZ:" });
+ _database.Insert(new UserTypeDto { Id = 1, Alias = "admin", Name = "Administrators", DefaultPermissions = "CADMOSKTPIURZ:5F" });
+ _database.Insert(new UserTypeDto { Id = 2, Alias = "writer", Name = "Writer", DefaultPermissions = "CAH:F" });
+ _database.Insert(new UserTypeDto { Id = 3, Alias = "editor", Name = "Editors", DefaultPermissions = "CADMOSKTPUZ:5F" });
+ _database.Insert(new UserTypeDto { Id = 4, Alias = "translator", Name = "Translator", DefaultPermissions = "AF" });
}
private void CreateUmbracoUser2AppData()
@@ -183,7 +185,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("cmsPropertyTypeGroup", "id", false, new PropertyTypeGroupDto { Id = 3, ContentTypeNodeId = 1032, Text = "Image", SortOrder = 1 });
_database.Insert("cmsPropertyTypeGroup", "id", false, new PropertyTypeGroupDto { Id = 4, ContentTypeNodeId = 1033, Text = "File", SortOrder = 1 });
_database.Insert("cmsPropertyTypeGroup", "id", false, new PropertyTypeGroupDto { Id = 5, ContentTypeNodeId = 1031, Text = "Contents", SortOrder = 1 });
- _database.Execute(new Sql("SET IDENTITY_INSERT [cmsPropertyTypeGroup] OFF "));
+ _database.Execute(new Sql("SET IDENTITY_INSERT [cmsPropertyTypeGroup] OFF;"));
transaction.Complete();
}
@@ -203,7 +205,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("cmsPropertyType", "id", false, new PropertyTypeDto { Id = 25, DataTypeId = -92, ContentTypeId = 1033, PropertyTypeGroupId = 4, Alias = "umbracoExtension", Name = "Type", HelpText = null, SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null });
_database.Insert("cmsPropertyType", "id", false, new PropertyTypeDto { Id = 26, DataTypeId = -92, ContentTypeId = 1033, PropertyTypeGroupId = 4, Alias = "umbracoBytes", Name = "Size", HelpText = null, SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null });
_database.Insert("cmsPropertyType", "id", false, new PropertyTypeDto { Id = 27, DataTypeId = -38, ContentTypeId = 1031, PropertyTypeGroupId = 5, Alias = "contents", Name = "Contents:", HelpText = null, SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null });
- _database.Execute(new Sql("SET IDENTITY_INSERT [cmsPropertyType] OFF "));
+ _database.Execute(new Sql("SET IDENTITY_INSERT [cmsPropertyType] OFF;"));
transaction.Complete();
}
@@ -271,10 +273,42 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 38, DataTypeId = 1041, ControlId = new Guid("4023e540-92f5-11dd-ad8b-0800200c9a66"), DbType = "Ntext" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 39, DataTypeId = 1042, ControlId = new Guid("474FCFF8-9D2D-11DE-ABC6-AD7A56D89593"), DbType = "Ntext" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 40, DataTypeId = 1043, ControlId = new Guid("7A2D436C-34C2-410F-898F-4A23B3D79F54"), DbType = "Ntext" });
- _database.Execute(new Sql("SET IDENTITY_INSERT [cmsDataType] OFF "));
+ _database.Execute(new Sql("SET IDENTITY_INSERT [cmsDataType] OFF;"));
transaction.Complete();
}
}
+
+ private void CreateCmsDataTypePreValuesData()
+ {}
+
+ private void CreateUmbracoRelationTypeData()
+ {}
+
+ private void CreateCmsTaskTypeData()
+ { }
+
+ /*
+
+ * SET IDENTITY_INSERT [cmsDataTypePreValues] ON
+insert into cmsDataTypePreValues (id, dataTypeNodeId, [value], sortorder, alias)
+values (3,-87,',code,undo,redo,cut,copy,mcepasteword,stylepicker,bold,italic,bullist,numlist,outdent,indent,mcelink,unlink,mceinsertanchor,mceimage,umbracomacro,mceinserttable,umbracoembed,mcecharmap,' + char(124) + '1' + char(124) + '1,2,3,' + char(124) + '0' + char(124) + '500,400' + char(124) + '1049,' + char(124) + 'true' + char(124) + '', 0, '')
+
+insert into cmsDataTypePreValues (id, dataTypeNodeId, [value], sortorder, alias)
+values (4,1041,'default', 0, 'group')
+
+SET IDENTITY_INSERT [cmsDataTypePreValues] OFF
+;
+
+ *
+ *
+
+insert into umbracoRelationType (dual, parentObjectType, childObjectType, name, alias) values (1, 'c66ba18e-eaf3-4cff-8a22-41b16d66a972', 'c66ba18e-eaf3-4cff-8a22-41b16d66a972', 'Relate Document On Copy','relateDocumentOnCopy')
+;
+ *
+ *
+
+ insert into cmsTaskType (alias) values ('toTranslate');
+ */
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs b/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs
index c409ddea3f..880f653a32 100644
--- a/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs
+++ b/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs
@@ -56,6 +56,7 @@ namespace Umbraco.Core.Persistence
if (!tableExist)
{
+ //Execute the Create Table sql
int created = db.Execute(new Sql(createSql));
//Fires the NewTable event, which is used internally to insert base data before adding constrants to the schema
@@ -65,17 +66,30 @@ namespace Umbraco.Core.Persistence
NewTable(tableName, db, e);
}
+ //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)
{
int createdFk = db.Execute(new Sql(sql));
}
+ //Loop through index statements and execute sql
foreach (var sql in indexSql)
{
int createdIndex = db.Execute(new Sql(sql));
}
+
+ //Specific to Sql Ce - look for changes to Identity Seed
+ if(DatabaseFactory.Current.DatabaseProvider == DatabaseProviders.SqlServerCE)
+ {
+ var seedSql = SyntaxConfig.SqlSyntaxProvider.ToAlterIdentitySeedStatements(tableDefinition);
+ foreach (var sql in seedSql)
+ {
+ int createdSeed = db.Execute(new Sql(sql));
+ }
+ }
}
}
diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
index f7659d0cf5..a2e72ffe57 100644
--- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
@@ -173,15 +173,18 @@ namespace Umbraco.Core.Persistence.Repositories
//Create the Content specific data - cmsContent
var contentDto = dto.ContentVersionDto.ContentDto;
+ contentDto.NodeId = nodeDto.NodeId;
Database.Insert(contentDto);
//Create the first version - cmsContentVersion
//Assumes a new Version guid and Version date (modified date) has been set
var contentVersionDto = dto.ContentVersionDto;
+ contentVersionDto.NodeId = nodeDto.NodeId;
Database.Insert(contentVersionDto);
//Create the Document specific data for this version - cmsDocument
//Assumes a new Version guid has been generated
+ dto.NodeId = nodeDto.NodeId;
Database.Insert(dto);
//Create the PropertyData for this version - cmsPropertyData
diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs
index ac99d6b9a8..1e58ef09cd 100644
--- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs
@@ -76,6 +76,7 @@ namespace Umbraco.Core.Persistence.Repositories
entity.Level = level;
//Insert new ContentType entry
+ dto.NodeId = nodeDto.NodeId;
Database.Insert(dto);
//Insert ContentType composition in new table
diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs
index 9a5cab14ec..c5e117459f 100644
--- a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs
+++ b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs
@@ -25,5 +25,6 @@ namespace Umbraco.Core.Persistence.SqlSyntax
string ToCreatePrimaryKeyStatement(TableDefinition table);
string GetSpecialDbType(SpecialDbTypes dbTypes);
string GetConstraintDefinition(ColumnDefinition column, string tableName);
+ List ToAlterIdentitySeedStatements(TableDefinition table);
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/ColumnDefinition.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/ColumnDefinition.cs
index a44e1d68d9..71e1826d8e 100644
--- a/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/ColumnDefinition.cs
+++ b/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/ColumnDefinition.cs
@@ -19,6 +19,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions
public bool IsPrimaryKeyClustered { get; set; }
public string PrimaryKeyName { get; set; }
public string PrimaryKeyColumns { get; set; }
+ public int PrimaryKeySeeding { get; set; }
public string ConstraintName { get; set; }
public string ConstraintDefaultValue { get; set; }
diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/DefinitionFactory.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/DefinitionFactory.cs
index 959b3e7105..0d2af3679a 100644
--- a/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/DefinitionFactory.cs
+++ b/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/DefinitionFactory.cs
@@ -15,7 +15,11 @@ namespace Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions
var objProperties = modelType.GetProperties().ToList();
foreach (var propertyInfo in objProperties)
{
- //If current property is a ResultColumn then skip it
+ //If current property has an IgnoreAttribute then skip it
+ var ignoreAttribute = propertyInfo.FirstAttribute();
+ if (ignoreAttribute != null) continue;
+
+ //If current property has a ResultColumnAttribute then skip it
var resultColumnAttribute = propertyInfo.FirstAttribute();
if (resultColumnAttribute != null) continue;
@@ -61,6 +65,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions
columnDefinition.IsPrimaryKeyClustered = primaryKeyColumnAttribute.Clustered;
columnDefinition.PrimaryKeyName = primaryKeyColumnAttribute.Name ?? string.Empty;
columnDefinition.PrimaryKeyColumns = primaryKeyColumnAttribute.OnColumns ?? string.Empty;
+ columnDefinition.PrimaryKeySeeding = primaryKeyColumnAttribute.IdentitySeed;
}
//Look for Constraint for the current column
diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs
index b7960830f3..ec0337d293 100644
--- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs
+++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs
@@ -8,6 +8,13 @@ using Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions;
namespace Umbraco.Core.Persistence.SqlSyntax
{
+ ///
+ /// Represents the Base Sql Syntax provider implementation.
+ ///
+ ///
+ /// All Sql Syntax provider implementations should derive from this abstract class.
+ ///
+ ///
internal abstract class SqlSyntaxProviderBase : ISqlSyntaxProvider
where TSyntax : ISqlSyntaxProvider
{
@@ -280,6 +287,24 @@ namespace Umbraco.Core.Persistence.SqlSyntax
return indexes;
}
+ public virtual List ToAlterIdentitySeedStatements(TableDefinition table)
+ {
+ var seeds = new List();
+
+ foreach (var definition in table.ColumnDefinitions)
+ {
+ if (definition.PrimaryKeySeeding > 0)
+ {
+ seeds.Add(string.Format("ALTER TABLE {0} ALTER COLUMN {1} IDENTITY({2},1); \n",
+ GetQuotedTableName(table.TableName),
+ GetQuotedColumnName(definition.ColumnName),
+ definition.PrimaryKeySeeding));
+ }
+ }
+
+ return seeds;
+ }
+
public virtual bool DoesTableExist(Database db, string tableName)
{
return false;
diff --git a/src/Umbraco.Tests/ContentStores/PublishContentStoreTests.cs b/src/Umbraco.Tests/ContentStores/PublishContentStoreTests.cs
index 26594a57da..be70bd007f 100644
--- a/src/Umbraco.Tests/ContentStores/PublishContentStoreTests.cs
+++ b/src/Umbraco.Tests/ContentStores/PublishContentStoreTests.cs
@@ -5,6 +5,7 @@ using Umbraco.Core;
using Umbraco.Tests.TestHelpers;
using Umbraco.Web;
using Umbraco.Web.Routing;
+using Umbraco.Web.Services;
using umbraco.BusinessLogic;
namespace Umbraco.Tests.ContentStores
@@ -70,6 +71,8 @@ namespace Umbraco.Tests.ContentStores
_umbracoContext = new UmbracoContext(_httpContextFactory.HttpContext,
new ApplicationContext(),
+ ServiceContext.Current,
+ DatabaseContext.Current,
new DefaultRoutesCache(false));
_umbracoContext.GetXmlDelegate = () =>
diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs
index 33067a71ad..e43f269a11 100644
--- a/src/Umbraco.Tests/Services/ContentServiceTests.cs
+++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs
@@ -2,6 +2,8 @@
using NUnit.Framework;
using Umbraco.Core.Models;
using Umbraco.Tests.TestHelpers;
+using Umbraco.Tests.TestHelpers.Entities;
+using Umbraco.Web;
using Umbraco.Web.Services;
namespace Umbraco.Tests.Services
@@ -13,7 +15,7 @@ namespace Umbraco.Tests.Services
public void Can_Create_Content()
{
// Arrange
- var contentService = GetUmbracoContext("/test", 1234).Services.ContentService;
+ var contentService = ServiceContext.ContentService;
// Act
IContent content = contentService.CreateContent(-1, "umbTextpage");
@@ -23,11 +25,11 @@ namespace Umbraco.Tests.Services
Assert.That(content.HasIdentity, Is.False);
}
- /*[Test]*/
+ [Test]
public void Cannot_Create_Content_With_Non_Existing_ContentType_Alias()
{
// Arrange
- var contentService = new ContentService();
+ var contentService = ServiceContext.ContentService;
// Act & Assert
Assert.Throws(() => contentService.CreateContent(-1, "umbAliasDoesntExist"));
@@ -95,5 +97,32 @@ namespace Umbraco.Tests.Services
public void Can_Rollback_Version_On_Content()
{ }
+
+ public override void CreateTestData()
+ {
+ //NOTE Maybe not the best way to create/save test data as we are using the services, which are being tested.
+
+ //Create and Save ContentType "umbTextpage"
+ ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage");
+ ServiceContext.ContentTypeService.Save(contentType);
+
+ //Create and Save Content "Homepage" based on "umbTextpage"
+ Content textpage = MockedContent.CreateTextpageContent(contentType);
+ ServiceContext.ContentService.Save(textpage, 0);
+
+ //Create and Save Content "Text Page 1" based on "umbTextpage"
+ Content subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", textpage.Id);
+ ServiceContext.ContentService.Save(subpage, 0);
+ }
+
+ private UmbracoContext UmbracoContext
+ {
+ get { return GetUmbracoContext("/test", 1234); }
+ }
+
+ private ServiceContext ServiceContext
+ {
+ get { return UmbracoContext.Services; }
+ }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
index 859d2a45c5..c06a1c7039 100644
--- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
+++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
@@ -13,6 +13,7 @@ using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Tests.Stubs;
using Umbraco.Web;
using Umbraco.Web.Routing;
+using Umbraco.Web.Services;
using umbraco.BusinessLogic;
namespace Umbraco.Tests.TestHelpers
@@ -27,11 +28,16 @@ namespace Umbraco.Tests.TestHelpers
[SetUp]
public virtual void Initialize()
{
+ TestHelper.SetupLog4NetForTests();
+
string path = TestHelper.CurrentAssemblyDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", path);
Resolution.Freeze();
ApplicationContext = new ApplicationContext() { IsReady = true };
+ ServiceContext = ServiceContext.Current;
+ DatabaseContext = DatabaseContext.Current;
+
//we need to clear out all currently created template files
var masterPages = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Masterpages));
masterPages.GetFiles().ForEach(x => x.Delete());
@@ -56,21 +62,44 @@ namespace Umbraco.Tests.TestHelpers
//Create the umbraco database
DatabaseFactory.Current.Database.Initialize();
+
+ CreateTestData();
}
[TearDown]
public virtual void TearDown()
{
+ //reset the app context
+ ServiceContext = null;
+ DatabaseContext = null;
+ ApplicationContext.Current = null;
+ Resolution.IsFrozen = false;
+
+ string path = TestHelper.CurrentAssemblyDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", null);
+
+ string filePath = string.Concat(path, "\\test.sdf");
+ if (File.Exists(filePath))
+ {
+ File.Delete(filePath);
+ }
}
+ public abstract void CreateTestData();
+
protected ApplicationContext ApplicationContext { get; private set; }
+ protected ServiceContext ServiceContext { get; private set; }
+
+ protected DatabaseContext DatabaseContext { get; private set; }
+
protected UmbracoContext GetUmbracoContext(string url, int templateId, RouteData routeData = null)
{
var ctx = new UmbracoContext(
GetHttpContextFactory(url, routeData).HttpContext,
ApplicationContext,
+ ServiceContext,
+ DatabaseContext,
GetRoutesCache());
SetupUmbracoContextForTest(ctx, templateId);
return ctx;
diff --git a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
index 4cb5ad9c11..aab970ea39 100644
--- a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
+++ b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
@@ -9,6 +9,7 @@ using Umbraco.Core.ObjectResolution;
using Umbraco.Tests.Stubs;
using Umbraco.Web;
using Umbraco.Web.Routing;
+using Umbraco.Web.Services;
using umbraco.BusinessLogic;
using umbraco.cms.businesslogic.cache;
using umbraco.cms.businesslogic.template;
@@ -30,6 +31,8 @@ namespace Umbraco.Tests.TestHelpers
TestHelper.InitializeDatabase();
Resolution.Freeze();
ApplicationContext = new ApplicationContext() { IsReady = true };
+ ServiceContext = ServiceContext.Current;
+ DatabaseContext = DatabaseContext.Current;
//we need to clear out all currently created template files
var masterPages = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Masterpages));
masterPages.GetFiles().ForEach(x => x.Delete());
@@ -42,6 +45,8 @@ namespace Umbraco.Tests.TestHelpers
{
//reset the app context
ApplicationContext.Current = null;
+ ServiceContext = null;
+ DatabaseContext = null;
Resolution.IsFrozen = false;
if (RequiresDbSetup)
TestHelper.ClearDatabase();
@@ -74,6 +79,10 @@ namespace Umbraco.Tests.TestHelpers
protected ApplicationContext ApplicationContext { get; private set; }
+ protected ServiceContext ServiceContext { get; private set; }
+
+ protected DatabaseContext DatabaseContext { get; private set; }
+
internal virtual IRoutesCache GetRoutesCache()
{
return new FakeRoutesCache();
@@ -84,6 +93,8 @@ namespace Umbraco.Tests.TestHelpers
var ctx = new UmbracoContext(
GetHttpContextFactory(url, routeData).HttpContext,
ApplicationContext,
+ ServiceContext,
+ DatabaseContext,
GetRoutesCache());
SetupUmbracoContextForTest(ctx, templateId);
return ctx;
diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs
index 5c0cce4697..01ed04b128 100644
--- a/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs
+++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs
@@ -12,13 +12,28 @@ namespace Umbraco.Tests.TestHelpers.Entities
{
title = "Welcome to our Home page",
bodyText = "This is the welcome message on the first page",
- keywords = "text,home,page",
- metaDescription = "The Lorem Ipsum company"
+ author = "John Doe"
};
content.PropertyValues(obj);
return content;
}
+
+ public static Content CreateTextpageContent(ContentType contentType, string name, int parentId)
+ {
+ var content = new Content(parentId, contentType) { Name = name, Language = "en-US", ParentId = parentId, Template = "~/masterpages/umbTextPage.master", UserId = 0 };
+ object obj =
+ new
+ {
+ title = name + " Subpage",
+ bodyText = "This is a subpage",
+ author = "John Doe"
+ };
+
+ content.PropertyValues(obj);
+
+ return content;
+ }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Web/UmbracoContext.cs b/src/Umbraco.Web/UmbracoContext.cs
index 695a04a774..c1075145fb 100644
--- a/src/Umbraco.Web/UmbracoContext.cs
+++ b/src/Umbraco.Web/UmbracoContext.cs
@@ -34,15 +34,19 @@ namespace Umbraco.Web
///
private static UmbracoContext _umbracoContext;
- ///
- /// Creates a new Umbraco context.
- ///
- ///
- ///
- ///
- internal UmbracoContext(
+ ///
+ /// Creates a new Umbraco context.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ internal UmbracoContext(
HttpContextBase httpContext,
ApplicationContext applicationContext,
+ ServiceContext serviceContext,
+ DatabaseContext databaseContext,
IRoutesCache routesCache)
{
if (httpContext == null) throw new ArgumentNullException("httpContext");
@@ -52,9 +56,8 @@ namespace Umbraco.Web
Application = applicationContext;
RoutesCache = routesCache;
- //Consider moving these two contexts to the constructor for proper DI
- Services = ServiceContext.Current;
- DatabaseContext = DatabaseContext.Current;
+ Services = serviceContext;
+ DatabaseContext = databaseContext;
// set the urls...
//original request url
diff --git a/src/Umbraco.Web/UmbracoModule.cs b/src/Umbraco.Web/UmbracoModule.cs
index 4b3367ef07..c704471c66 100644
--- a/src/Umbraco.Web/UmbracoModule.cs
+++ b/src/Umbraco.Web/UmbracoModule.cs
@@ -12,6 +12,7 @@ using System.Web.UI;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Web.Routing;
+using Umbraco.Web.Services;
using umbraco;
using umbraco.IO;
using GlobalSettings = Umbraco.Core.Configuration.GlobalSettings;
@@ -50,6 +51,8 @@ namespace Umbraco.Web
var umbracoContext = new UmbracoContext(
httpContext,
ApplicationContext.Current,
+ ServiceContext.Current,
+ DatabaseContext.Current,
RoutesCacheResolver.Current.RoutesCache);
UmbracoContext.Current = umbracoContext;