diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs index e5eef9e659..83676ae881 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs @@ -147,30 +147,26 @@ namespace Umbraco.Core.Persistence.Repositories public IMemberGroup CreateIfNotExists(string roleName) { - using (var transaction = Database.GetTransaction()) + var qry = new Query().Where(group => group.Name.Equals(roleName)); + var result = GetByQuery(qry); + + if (result.Any()) return null; + + var grp = new MemberGroup { - var qry = new Query().Where(group => group.Name.Equals(roleName)); - var result = GetByQuery(qry); + Name = roleName + }; - if (result.Any()) return null; + PersistNewItem(grp); - var grp = new MemberGroup - { - Name = roleName - }; - PersistNewItem(grp); - - if (SavingMemberGroup.IsRaisedEventCancelled(new SaveEventArgs(grp), this, UnitOfWork.EventManager)) - { - return null; - } - - transaction.Complete(); - - SavedMemberGroup.RaiseEvent(new SaveEventArgs(grp), this, UnitOfWork.EventManager); - - return grp; + if (SavingMemberGroup.IsRaisedEventCancelled(new SaveEventArgs(grp), this, UnitOfWork.EventManager)) + { + return null; } + + SavedMemberGroup.RaiseEvent(new SaveEventArgs(grp), this, UnitOfWork.EventManager); + + return grp; } public IEnumerable GetMemberGroupsForMember(int memberId) @@ -221,51 +217,39 @@ namespace Umbraco.Core.Persistence.Repositories public void AssignRoles(string[] usernames, string[] roleNames) { - using (var transaction = Database.GetTransaction()) - { - //first get the member ids based on the usernames - var memberSql = new Sql(); - var memberObjectType = new Guid(Constants.ObjectTypes.Member); - memberSql.Select("umbracoNode.id") - .From() - .InnerJoin() - .On(dto => dto.NodeId, dto => dto.NodeId) - .Where(x => x.NodeObjectType == memberObjectType) - .Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames }); - var memberIds = Database.Fetch(memberSql).ToArray(); + //first get the member ids based on the usernames + var memberSql = new Sql(); + var memberObjectType = new Guid(Constants.ObjectTypes.Member); + memberSql.Select("umbracoNode.id") + .From() + .InnerJoin() + .On(dto => dto.NodeId, dto => dto.NodeId) + .Where(x => x.NodeObjectType == memberObjectType) + .Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames }); + var memberIds = Database.Fetch(memberSql).ToArray(); - AssignRolesInternal(memberIds, roleNames); - transaction.Complete(); - } + AssignRolesInternal(memberIds, roleNames); } public void DissociateRoles(string[] usernames, string[] roleNames) { - using (var transaction = Database.GetTransaction()) - { - //first get the member ids based on the usernames - var memberSql = new Sql(); - var memberObjectType = new Guid(Constants.ObjectTypes.Member); - memberSql.Select("umbracoNode.id") - .From() - .InnerJoin() - .On(dto => dto.NodeId, dto => dto.NodeId) - .Where(x => x.NodeObjectType == memberObjectType) - .Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames }); - var memberIds = Database.Fetch(memberSql).ToArray(); + //first get the member ids based on the usernames + var memberSql = new Sql(); + var memberObjectType = new Guid(Constants.ObjectTypes.Member); + memberSql.Select("umbracoNode.id") + .From() + .InnerJoin() + .On(dto => dto.NodeId, dto => dto.NodeId) + .Where(x => x.NodeObjectType == memberObjectType) + .Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames }); + var memberIds = Database.Fetch(memberSql).ToArray(); - DissociateRolesInternal(memberIds, roleNames); - transaction.Complete(); - } + DissociateRolesInternal(memberIds, roleNames); } public void AssignRoles(int[] memberIds, string[] roleNames) { - using (var transaction = Database.GetTransaction()) - { - AssignRolesInternal(memberIds, roleNames); - transaction.Complete(); - } + AssignRolesInternal(memberIds, roleNames); } public void AssignRolesInternal(int[] memberIds, string[] roleNames) @@ -333,11 +317,7 @@ namespace Umbraco.Core.Persistence.Repositories public void DissociateRoles(int[] memberIds, string[] roleNames) { - using (var transaction = Database.GetTransaction()) - { - DissociateRolesInternal(memberIds, roleNames); - transaction.Complete(); - } + DissociateRolesInternal(memberIds, roleNames); } private void DissociateRolesInternal(int[] memberIds, string[] roleNames) diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 476d64767e..fa1b7f6cba 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -1067,12 +1067,13 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { repository.CreateIfNotExists(roleName); + uow.Commit(); } } public IEnumerable GetAllRoles() { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { var result = repository.GetAll(); @@ -1082,7 +1083,7 @@ namespace Umbraco.Core.Services public IEnumerable GetAllRoles(int memberId) { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { var result = repository.GetMemberGroupsForMember(memberId); @@ -1092,7 +1093,7 @@ namespace Umbraco.Core.Services public IEnumerable GetAllRoles(string username) { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { var result = repository.GetMemberGroupsForMember(username); @@ -1102,7 +1103,7 @@ namespace Umbraco.Core.Services public IEnumerable GetMembersInRole(string roleName) { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberRepository(uow)) { return repository.GetByMemberGroup(roleName); @@ -1111,7 +1112,7 @@ namespace Umbraco.Core.Services public IEnumerable FindMembersInRole(string roleName, string usernameToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberRepository(uow)) { return repository.FindMembersInRole(roleName, usernameToMatch, matchType); @@ -1131,18 +1132,20 @@ namespace Umbraco.Core.Services } } - var uow = UowProvider.GetUnitOfWork(); + List found; + + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { var qry = new Query().Where(g => g.Name == roleName); - var found = repository.GetByQuery(qry).ToArray(); - - foreach (var memberGroup in found) - { - _memberGroupService.Delete(memberGroup); - } - return found.Any(); + found = repository.GetByQuery(qry).ToList(); } + + foreach (var memberGroup in found) + { + _memberGroupService.Delete(memberGroup); + } + return found.Any(); } } public void AssignRole(string username, string roleName) @@ -1156,6 +1159,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { repository.AssignRoles(usernames, roleNames); + uow.Commit(); } } @@ -1170,6 +1174,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { repository.DissociateRoles(usernames, roleNames); + uow.Commit(); } } @@ -1184,6 +1189,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { repository.AssignRoles(memberIds, roleNames); + uow.Commit(); } } @@ -1198,6 +1204,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { repository.DissociateRoles(memberIds, roleNames); + uow.Commit(); } } @@ -1207,7 +1214,7 @@ namespace Umbraco.Core.Services private IMemberType FindMemberTypeByAlias(string memberTypeAlias) { - using (var repository = RepositoryFactory.CreateMemberTypeRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateMemberTypeRepository(UowProvider.GetReadOnlyUnitOfWork())) { var query = Query.Builder.Where(x => x.Alias == memberTypeAlias); var types = repository.GetByQuery(query);