diff --git a/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs b/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs
index 60e176096f..273d605bef 100644
--- a/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs
+++ b/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs
@@ -151,6 +151,21 @@ namespace Umbraco.Core.Persistence.Caching
_keyTracker.Remove(key);
}
+ public void Delete(Type type, int entityId)
+ {
+ var key = GetCompositeId(type, entityId);
+ if (_memoryCache != null)
+ {
+ _memoryCache.Remove(key);
+ }
+ else
+ {
+ HttpRuntime.Cache.Remove(key);
+ }
+
+ _keyTracker.Remove(key);
+ }
+
///
/// Clear cache by type
///
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
index cd2e0c373b..ae76216800 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
@@ -512,6 +512,10 @@ namespace Umbraco.Core.Persistence.Repositories
totalRecords = Convert.ToInt32(pagedResult.TotalItems);
//now that we have the member dto's we need to construct true members from the list.
+ if (totalRecords == 0)
+ {
+ return Enumerable.Empty();
+ }
var result = GetAll(pagedResult.Items.Select(x => x.NodeId).ToArray());
//now we need to ensure this result is also ordered by the same order by clause
diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
index e5074758b7..3bae7f7f2c 100644
--- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
@@ -298,6 +298,11 @@ namespace Umbraco.Core.Persistence.Repositories
totalRecords = Convert.ToInt32(pagedResult.TotalItems);
//now that we have the user dto's we need to construct true members from the list.
+ if (totalRecords == 0)
+ {
+ return Enumerable.Empty();
+ }
+
var result = GetAll(pagedResult.Items.Select(x => x.Id).ToArray());
//now we need to ensure this result is also ordered by the same order by clause
diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs
index db3bdb9c48..a256430879 100644
--- a/src/Umbraco.Core/Services/MemberService.cs
+++ b/src/Umbraco.Core/Services/MemberService.cs
@@ -189,7 +189,7 @@ namespace Umbraco.Core.Services
using (var uow = _uowProvider.GetUnitOfWork())
{
var repository = _repositoryFactory.CreateMemberRepository(uow);
- //NOTE What about content that has the contenttype as part of its composition?
+ //TODO: What about content that has the contenttype as part of its composition?
var query = Query.Builder.Where(x => x.ContentTypeId == memberTypeId);
var members = repository.GetByQuery(query).ToArray();
diff --git a/src/Umbraco.Web/Cache/MemberCacheRefresher.cs b/src/Umbraco.Web/Cache/MemberCacheRefresher.cs
index 8f6437c8b6..2b740e826d 100644
--- a/src/Umbraco.Web/Cache/MemberCacheRefresher.cs
+++ b/src/Umbraco.Web/Cache/MemberCacheRefresher.cs
@@ -1,6 +1,8 @@
using System;
using Umbraco.Core;
using Umbraco.Core.Cache;
+using Umbraco.Core.Models;
+using Umbraco.Core.Persistence.Caching;
using umbraco.cms.businesslogic.member;
using umbraco.interfaces;
@@ -50,6 +52,8 @@ namespace Umbraco.Web.Cache
ClearCacheByKeySearch(string.Format("{0}_{1}", CacheKeys.MemberLibraryCacheKey, id));
ApplicationContext.Current.ApplicationCache.
ClearCacheByKeySearch(string.Format("{0}{1}", CacheKeys.MemberBusinessLogicCacheKey, id));
+
+ RuntimeCacheProvider.Current.Delete(typeof(IMember), id);
}
}
}
\ No newline at end of file
diff --git a/src/umbraco.cms/businesslogic/member/Member.cs b/src/umbraco.cms/businesslogic/member/Member.cs
index 40275672d1..9bb8638773 100644
--- a/src/umbraco.cms/businesslogic/member/Member.cs
+++ b/src/umbraco.cms/businesslogic/member/Member.cs
@@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
+using System.Globalization;
using System.Runtime.CompilerServices;
using System.Web;
using System.Xml;
@@ -11,6 +12,7 @@ using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Rdbms;
+using Umbraco.Core.Persistence.Querying;
using umbraco.cms.businesslogic.cache;
using umbraco.BusinessLogic;
using umbraco.DataLayer;
@@ -63,6 +65,12 @@ namespace umbraco.cms.businesslogic.member
#region Constructors
+ internal Member(IMember member)
+ : base(member)
+ {
+ SetupNode(member);
+ }
+
///
/// Initializes a new instance of the Member class.
///
@@ -103,20 +111,10 @@ namespace umbraco.cms.businesslogic.member
public static IEnumerable GetAllAsList()
{
- var tmp = new List();
- using (var dr = SqlHelper.ExecuteReader(
- string.Format(_sQLOptimizedMany.Trim(), "1=1", "umbracoNode.text"),
- SqlHelper.CreateParameter("@nodeObjectType", Member._objectType)))
- {
- while (dr.Read())
- {
- var m = new Member(dr.GetInt("id"), true);
- m.PopulateMemberFromReader(dr);
- tmp.Add(m);
- }
- }
-
- return tmp.ToArray();
+ int totalRecs;
+ return ApplicationContext.Current.Services.MemberService.GetAllMembers(0, int.MaxValue, out totalRecs)
+ .Select(x => new Member(x))
+ .ToArray();
}
///
@@ -149,7 +147,11 @@ namespace umbraco.cms.businesslogic.member
///
public static Member[] getMemberFromFirstLetter(char letter)
{
- return GetMemberByName(letter.ToString(), true);
+ int totalRecs;
+ return ApplicationContext.Current.Services.MemberService.FindMembersByUsername(
+ letter.ToString(CultureInfo.InvariantCulture), 0, int.MaxValue, out totalRecs, StringPropertyMatchType.StartsWith)
+ .Select(x => new Member(x))
+ .ToArray();
}
public static Member[] GetMemberByName(string usernameToMatch, bool matchByNameInsteadOfLogin)
@@ -214,7 +216,7 @@ namespace umbraco.cms.businesslogic.member
{
if (mbt == null) throw new ArgumentNullException("mbt");
- var loginName = (!string.IsNullOrEmpty(LoginName)) ? LoginName : Name;
+ var loginName = (string.IsNullOrEmpty(LoginName) == false) ? LoginName : Name;
if (string.IsNullOrEmpty(loginName))
throw new ArgumentException("The loginname must be different from an empty string", "loginName");
@@ -267,27 +269,12 @@ namespace umbraco.cms.businesslogic.member
/// The member with the specified loginname - null if no Member with the login exists
public static Member GetMemberFromLoginName(string loginName)
{
- if (string.IsNullOrEmpty(loginName))
- throw new ArgumentException("The username of a Member must be different from an emptry string", "loginName");
- if (IsMember(loginName))
- {
- var o = SqlHelper.ExecuteScalar