diff --git a/src/Umbraco.Core/Persistence/EntityNotFoundException.cs b/src/Umbraco.Core/Persistence/EntityNotFoundException.cs
new file mode 100644
index 0000000000..1cc66a2ba2
--- /dev/null
+++ b/src/Umbraco.Core/Persistence/EntityNotFoundException.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Umbraco.Core.Persistence
+{
+
+ //TODO: Would be good to use this exception type anytime we cannot find an entity
+
+ ///
+ /// An exception used to indicate that an umbraco entity could not be found
+ ///
+ public class EntityNotFoundException : Exception
+ {
+ public object Id { get; private set; }
+ private readonly string _msg;
+
+ public EntityNotFoundException(object id, string msg)
+ {
+ Id = id;
+ _msg = msg;
+ }
+
+ public EntityNotFoundException(string msg)
+ {
+ _msg = msg;
+ }
+
+ public override string Message
+ {
+ get { return _msg; }
+ }
+
+ public override string ToString()
+ {
+ var result = base.ToString();
+
+ if (Id != null)
+ {
+ return "Umbraco entity (id: " + Id + ") not found. " + result;
+ }
+
+ return result;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs
index 1c59e33d6a..21421a1936 100644
--- a/src/Umbraco.Core/Services/UserService.cs
+++ b/src/Umbraco.Core/Services/UserService.cs
@@ -51,7 +51,7 @@ namespace Umbraco.Core.Services
if (types.Any() == false)
{
- throw new InvalidOperationException("No member types could be resolved");
+ throw new EntityNotFoundException("No member types could be resolved");
}
if (types.InvariantContains("writer"))
@@ -126,7 +126,7 @@ namespace Umbraco.Core.Services
var userType = GetUserTypeByAlias(memberTypeAlias);
if (userType == null)
{
- throw new ArgumentException("The user type " + memberTypeAlias + " could not be resolved");
+ throw new EntityNotFoundException("The user type " + memberTypeAlias + " could not be resolved");
}
return CreateMemberWithIdentity(username, email, password, userType);
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 21385ac39c..0cb85f416d 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -354,6 +354,7 @@
+
diff --git a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
index 04c7b39829..69cef03ab4 100644
--- a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
+++ b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
@@ -8,6 +8,7 @@ using System.Web.Http;
using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Models.EntityBase;
+using Umbraco.Core.Persistence;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.WebApi.Filters;
using umbraco;
@@ -88,6 +89,10 @@ namespace Umbraco.Web.Trees
{
//just return their single start node, it will show up under the 'Content' label
var startNode = Services.EntityService.Get(UserStartNode, UmbracoObjectType);
+ if (startNode == null)
+ {
+ throw new EntityNotFoundException(UserStartNode, "User's start content node could not be found");
+ }
return new[] { startNode };
}