public IEnumerable<Member> GetMembers(int roleId)
		{
			var entity = new MemberEntity();
			var dataAccess = this.EnsureService<IDataAccess>();

			var oql = OQL.From(entity)
						 .Select()
						 .Where(p => p.Compare(entity.RoleId, "=", roleId))
						 .OrderBy(p => p.Desc(entity.RoleId))
						 .End();

			var entities = dataAccess.Select<MemberEntity>(oql);

			return Mapper.Map<IEnumerable<MemberEntity>, IEnumerable<Member>>(entities);
		}
		public int DeleteMembers(IEnumerable<Member> members)
		{
			if(members == null)
				return 0;

			var dataAccess = this.EnsureService<IDataAccess>();

			dataAccess.BeginTransaction();

			var count = 0;

			try
			{
				foreach(var member in members)
				{
					if(member == null)
						continue;

					var entity = new MemberEntity
					{
						RoleId = member.RoleId,
						MemberId = member.MemberId,
						MemberType = Convert.ConvertValue<byte>(member.MemberType)
					};

					count += dataAccess.Delete(entity);
				}

				dataAccess.Commit();
			}
			catch(Exception ex)
			{
				dataAccess.Rollback();

				throw ex;
			}

			return count;
		}
		public IEnumerable<Role> GetRoles(int memberId, MemberType memberType)
		{
			var role = new RoleEntity();
			var member = new MemberEntity();
			var dataAccess = this.EnsureService<IDataAccess>();

			var child = OQL.From(member)
						   .Select(member.RoleId)
						   .Where(p => p.Compare(member.MemberId, "=", memberId) & p.Compare(member.MemberType, "=", Convert.ConvertValue<byte>(memberType)))
						   .End();

			var master = OQL.From(role)
							.Select()
							.Where(p => p.Compare(role.RoleId, CompareOperator.In, child))
							.End();

			var entities = dataAccess.Select<RoleEntity>(master);

			return Mapper.Map<IEnumerable<RoleEntity>, IEnumerable<Role>>(entities);
		}