Fixing: U4-5157 Membership.GetUser() causes 13 SQL queries, including duplicates

This commit is contained in:
Shannon
2014-07-08 18:07:59 +10:00
parent bcae3afa45
commit 5a810b584e
3 changed files with 70 additions and 65 deletions

View File

@@ -51,24 +51,20 @@ namespace Umbraco.Tests.Membership
{
var date = DateTime.Now;
var m = Mock.Of<MembershipUser>(
user => user.UserName == "test username"
&& user.Comment == "test comment"
&& user.IsApproved == true
&& user.IsLockedOut == false
&& user.CreationDate == date
&& user.Email == "test@email.com"
&& user.LastActivityDate == date.AddMinutes(1)
&& user.LastLockoutDate == date.AddMinutes(2)
&& user.LastLoginDate == date.AddMinutes(3)
&& user.LastPasswordChangedDate == date.AddMinutes(4)
&& user.PasswordQuestion == "test question");
var member = new Member("test name", "test@email.com", "test username", "test password",
GetMemberType());
member.Comments = "test comment";
member.IsApproved = true;
member.IsLockedOut = false;
member.CreateDate = date;
member.LastLoginDate = date.AddMinutes(1);
member.LastLockoutDate = date.AddMinutes(2);
//NOTE: Last activity date is always the same as last login date since we don't have a place to store that data
//member.LastLoginDate = date.AddMinutes(3);
member.LastPasswordChangeDate = date.AddMinutes(4);
member.PasswordQuestion = "test question";
var mpc = new MemberPublishedContent(
new Member("test name", "test@email.com", "test username", "test password",
Mock.Of<IMemberType>(type => type.Alias == "Member")),
m);
var mpc = new MemberPublishedContent(member);
var d = mpc.AsDynamic();
@@ -79,7 +75,7 @@ namespace Umbraco.Tests.Membership
Assert.AreEqual(false, d.IsLockedOut);
Assert.AreEqual(date.AddMinutes(1), d.LastActivityDate);
Assert.AreEqual(date.AddMinutes(2), d.LastLockoutDate);
Assert.AreEqual(date.AddMinutes(3), d.LastLoginDate);
Assert.AreEqual(date.AddMinutes(1), d.LastLoginDate);
Assert.AreEqual(date.AddMinutes(4), d.LastPasswordChangedDate);
Assert.AreEqual("test name", d.Name);
Assert.AreEqual("test question", d.PasswordQuestion);
@@ -92,24 +88,20 @@ namespace Umbraco.Tests.Membership
{
var date = DateTime.Now;
var m = Mock.Of<MembershipUser>(
user => user.UserName == "test username"
&& user.Comment == "test comment"
&& user.IsApproved == true
&& user.IsLockedOut == false
&& user.CreationDate == date
&& user.Email == "test@email.com"
&& user.LastActivityDate == date.AddMinutes(1)
&& user.LastLockoutDate == date.AddMinutes(2)
&& user.LastLoginDate == date.AddMinutes(3)
&& user.LastPasswordChangedDate == date.AddMinutes(4)
&& user.PasswordQuestion == "test question");
var member = new Member("test name", "test@email.com", "test username", "test password",
GetMemberType());
member.Comments = "test comment";
member.IsApproved = true;
member.IsLockedOut = false;
member.CreateDate = date;
member.LastLoginDate = date.AddMinutes(1);
member.LastLockoutDate = date.AddMinutes(2);
//NOTE: Last activity date is always the same as last login date since we don't have a place to store that data
//member.LastLoginDate = date.AddMinutes(3);
member.LastPasswordChangeDate = date.AddMinutes(4);
member.PasswordQuestion = "test question";
var mpc = new MemberPublishedContent(
new Member("test name", "test@email.com", "test username", "test password",
Mock.Of<IMemberType>(type => type.Alias == "Member")) ,
m);
var mpc = new MemberPublishedContent(member);
var d = mpc.AsDynamic();
@@ -120,7 +112,7 @@ namespace Umbraco.Tests.Membership
Assert.AreEqual(false, d.isLockedOut);
Assert.AreEqual(date.AddMinutes(1), d.lastActivityDate);
Assert.AreEqual(date.AddMinutes(2), d.lastLockoutDate);
Assert.AreEqual(date.AddMinutes(3), d.lastLoginDate);
Assert.AreEqual(date.AddMinutes(1), d.lastLoginDate);
Assert.AreEqual(date.AddMinutes(4), d.lastPasswordChangedDate);
Assert.AreEqual("test name", d.name);
Assert.AreEqual("test question", d.passwordQuestion);
@@ -133,25 +125,23 @@ namespace Umbraco.Tests.Membership
{
var date = DateTime.Now;
var m = Mock.Of<MembershipUser>(
user => user.UserName == "test username"
&& user.Comment == "test comment"
&& user.IsApproved == true
&& user.IsLockedOut == false
&& user.CreationDate == date
&& user.Email == "test@email.com"
&& user.LastActivityDate == date.AddMinutes(1)
&& user.LastLockoutDate == date.AddMinutes(2)
&& user.LastLoginDate == date.AddMinutes(3)
&& user.LastPasswordChangedDate == date.AddMinutes(4)
&& user.PasswordQuestion == "test question");
var memberType = MockedContentTypes.CreateSimpleMemberType("Member", "Member");
var member = MockedMember.CreateSimpleMember(memberType, "test name", "test@email.com", "test password", "test username");
member.Comments = "test comment";
member.IsApproved = true;
member.IsLockedOut = false;
member.CreateDate = date;
member.LastLoginDate = date.AddMinutes(1);
member.LastLockoutDate = date.AddMinutes(2);
//NOTE: Last activity date is always the same as last login date since we don't have a place to store that data
//member.LastLoginDate = date.AddMinutes(3);
member.LastPasswordChangeDate = date.AddMinutes(4);
member.PasswordQuestion = "test question";
member.Properties["title"].Value = "Test Value 1";
member.Properties["bodyText"].Value = "Test Value 2";
member.Properties["author"].Value = "Test Value 3";
var mpc = new MemberPublishedContent(member, m);
var mpc = new MemberPublishedContent(member);
var d = mpc.AsDynamic();
@@ -165,6 +155,21 @@ namespace Umbraco.Tests.Membership
}
private IMemberType GetMemberType()
{
var entity = new MemberType(-1)
{
Alias = "Member"
};
entity.AddPropertyGroup(Umbraco.Core.Constants.Conventions.Member.StandardPropertiesGroupName);
var standardPropertyTypes = Umbraco.Core.Constants.Conventions.Member.GetStandardPropertyTypeStubs();
foreach (var standardPropertyType in standardPropertyTypes)
{
entity.AddPropertyType(standardPropertyType.Value, Umbraco.Core.Constants.Conventions.Member.StandardPropertiesGroupName);
}
return entity;
}
}
}

View File

@@ -5,6 +5,7 @@ using System.Text;
using System.Web.Security;
using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Services;
@@ -19,17 +20,16 @@ namespace Umbraco.Web.PublishedCache
{
private readonly IMember _member;
private readonly MembershipUser _membershipUser;
private readonly IMembershipUser _membershipUser;
private readonly IPublishedProperty[] _properties;
private readonly PublishedContentType _publishedMemberType;
public MemberPublishedContent(IMember member, MembershipUser membershipUser)
public MemberPublishedContent(IMember member)
{
if (member == null) throw new ArgumentNullException("member");
if (membershipUser == null) throw new ArgumentNullException("membershipUser");
if (member == null) throw new ArgumentNullException("member");
_member = member;
_membershipUser = membershipUser;
_membershipUser = member;
_publishedMemberType = PublishedContentType.Get(PublishedItemType.Member, _member.ContentTypeAlias);
if (_publishedMemberType == null)
{
@@ -49,7 +49,7 @@ namespace Umbraco.Web.PublishedCache
}
public string UserName
{
get { return _membershipUser.UserName; }
get { return _membershipUser.Username; }
}
public string PasswordQuestion
{
@@ -57,7 +57,7 @@ namespace Umbraco.Web.PublishedCache
}
public string Comments
{
get { return _membershipUser.Comment; }
get { return _membershipUser.Comments; }
}
public bool IsApproved
{
@@ -73,7 +73,7 @@ namespace Umbraco.Web.PublishedCache
}
public DateTime CreationDate
{
get { return _membershipUser.CreationDate; }
get { return _membershipUser.CreateDate; }
}
public DateTime LastLoginDate
{
@@ -81,11 +81,11 @@ namespace Umbraco.Web.PublishedCache
}
public DateTime LastActivityDate
{
get { return _membershipUser.LastActivityDate; }
get { return _membershipUser.LastLoginDate; }
}
public DateTime LastPasswordChangedDate
{
get { return _membershipUser.LastPasswordChangedDate; }
get { return _membershipUser.LastPasswordChangeDate; }
}
#endregion

View File

@@ -225,7 +225,7 @@ namespace Umbraco.Web.Security
}
var result = _applicationContext.Services.MemberService.GetByProviderKey(key);
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, false));
return result == null ? null : new MemberPublishedContent(result);
}
public IPublishedContent GetById(int memberId)
@@ -237,7 +237,7 @@ namespace Umbraco.Web.Security
}
var result = _applicationContext.Services.MemberService.GetById(memberId);
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, false));
return result == null ? null : new MemberPublishedContent(result);
}
public IPublishedContent GetByUsername(string username)
@@ -249,7 +249,7 @@ namespace Umbraco.Web.Security
}
var result = _applicationContext.Services.MemberService.GetByUsername(username);
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, false));
return result == null ? null : new MemberPublishedContent(result);
}
public IPublishedContent GetByEmail(string email)
@@ -261,7 +261,7 @@ namespace Umbraco.Web.Security
}
var result = _applicationContext.Services.MemberService.GetByEmail(email);
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, false));
return result == null ? null : new MemberPublishedContent(result);
}
/// <summary>
@@ -276,7 +276,7 @@ namespace Umbraco.Web.Security
}
var result = GetCurrentPersistedMember();
var provider = MPE.GetMembersMembershipProvider();
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, true));
return result == null ? null : new MemberPublishedContent(result);
}
/// <summary>