/// <summary>
            /// Gets the hardware station profiles from the data service.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            /// <exception cref="Microsoft.Dynamics.Commerce.Runtime.ConfigurationException">Required Service missing.</exception>
            protected override GetHardwareStationProfileResponse Process(GetHardwareStationProfileRequest request)
            {
                ThrowIf.Null(request, "request");

                var getHardwareStationProfileDataRequest = new GetHardwareStationDataRequest(QueryResultSettings.AllRecords);

                var hardwareStationProfiles = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <HardwareStationProfile> >(
                    getHardwareStationProfileDataRequest, request.RequestContext).PagedEntityCollection;

                return(new GetHardwareStationProfileResponse(hardwareStationProfiles));
            }
            private EntityDataServiceResponse <HardwareStationProfile> GetHardwareStationProfile(GetHardwareStationDataRequest request)
            {
                ThrowIf.Null(request, "request");
                ThrowIf.Null(request.RequestContext, "request.RequestContext");
                ThrowIf.Null(request.QueryResultSettings, "request.QueryResultSettings");

                ParameterSet parameters = new ParameterSet();
                Tuple <PagedResult <HardwareStationProfile>,
                       ReadOnlyCollection <HardwareConfiguration>,
                       ReadOnlyCollection <HardwareConfiguration>,
                       ReadOnlyCollection <HardwareConfiguration> > dataSets = null;

                parameters[DatabaseAccessor.ChannelIdVariableName] = request.RequestContext.GetPrincipal().ChannelId;

                using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(request.RequestContext, request.QueryResultSettings))
                {
                    dataSets = databaseContext.ExecuteStoredProcedure <HardwareStationProfile, HardwareConfiguration, HardwareConfiguration, HardwareConfiguration>(GetHardwareStationsSprocName, parameters);
                }

                PagedResult <HardwareStationProfile>       hardwareStationProfiles = dataSets.Item1;
                ReadOnlyCollection <HardwareConfiguration> drawers  = dataSets.Item2;
                ReadOnlyCollection <HardwareConfiguration> printers = dataSets.Item3;
                ReadOnlyCollection <HardwareConfiguration> pinpads  = dataSets.Item4;

                foreach (var hardwareStationProfile in hardwareStationProfiles.Results)
                {
                    if (hardwareStationProfile != null)
                    {
                        hardwareStationProfile.HardwareConfigurations = new HardwareConfigurations();
                        if (drawers != null)
                        {
                            hardwareStationProfile.HardwareConfigurations.CashDrawerConfigurations.AddRange(
                                from d in drawers
                                where d.HardwareStationRecordId == hardwareStationProfile.RecordId && !string.IsNullOrEmpty(d.DeviceName)
                                select d);
                        }

                        if (printers != null)
                        {
                            hardwareStationProfile.HardwareConfigurations.PrinterConfigurations.AddRange(
                                from p in printers
                                where p.HardwareStationRecordId == hardwareStationProfile.RecordId && !string.IsNullOrEmpty(p.DeviceName)
                                select p);
                        }

                        if (pinpads != null)
                        {
                            hardwareStationProfile.HardwareConfigurations.PinPadConfiguration =
                                (from p in pinpads
                                 where p.HardwareStationRecordId == hardwareStationProfile.RecordId && !string.IsNullOrEmpty(p.DeviceName)
                                 select p).SingleOrDefault();
                        }
                    }
                }

                return(new EntityDataServiceResponse <HardwareStationProfile>(hardwareStationProfiles));
            }