/// <summary> /// Construct AzureSqlDatabaseModel from Management.Sql.Models.Database object /// </summary> /// <param name="resourceGroup">Resource group</param> /// <param name="serverName">Server name</param> /// <param name="database">Database object</param> public AzureSqlDatabaseModel(string resourceGroup, string serverName, Management.Sql.Models.Database database) { Guid id = Guid.Empty; DatabaseEdition edition = DatabaseEdition.None; ResourceGroupName = resourceGroup; ServerName = serverName; CollationName = database.Properties.Collation; CreationDate = database.Properties.CreationDate; CurrentServiceObjectiveName = database.Properties.ServiceObjective; MaxSizeBytes = database.Properties.MaxSizeBytes; DatabaseName = database.Name; Status = database.Properties.Status; Tags = database.Tags as Dictionary <string, string>; ElasticPoolName = database.Properties.ElasticPoolName; Location = database.Location; ResourceId = database.Id; CreateMode = database.Properties.CreateMode; EarliestRestoreDate = database.Properties.EarliestRestoreDate; Guid.TryParse(database.Properties.CurrentServiceObjectiveId, out id); CurrentServiceObjectiveId = id; Guid.TryParse(database.Properties.DatabaseId, out id); DatabaseId = id; Enum.TryParse <DatabaseEdition>(database.Properties.Edition, true, out edition); Edition = edition; Guid.TryParse(database.Properties.RequestedServiceObjectiveId, out id); RequestedServiceObjectiveId = id; }
/// <summary> /// Construct AzureSqlDatabaseModel from Management.Sql.LegacySdk.Models.Database object /// </summary> /// <param name="resourceGroup">Resource group</param> /// <param name="serverName">Server name</param> /// <param name="database">Database object</param> public AzureSqlDatabaseModel(string resourceGroup, string serverName, Management.Sql.Models.Database database) { DatabaseEdition edition = DatabaseEdition.None; DatabaseReadScale readScale = DatabaseReadScale.Enabled; ResourceGroupName = resourceGroup; ServerName = serverName; CollationName = database.Collation; CreationDate = database.CreationDate.Value; CurrentServiceObjectiveName = database.ServiceLevelObjective; MaxSizeBytes = long.Parse(database.MaxSizeBytes); DatabaseName = database.Name; Status = database.Status; Tags = TagsConversionHelper.CreateTagDictionary(TagsConversionHelper.CreateTagHashtable(database.Tags), false); ElasticPoolName = database.ElasticPoolName; Location = database.Location; ResourceId = database.Id; CreateMode = database.CreateMode; EarliestRestoreDate = database.EarliestRestoreDate; CurrentServiceObjectiveId = database.CurrentServiceObjectiveId.Value; DatabaseId = database.DatabaseId.Value; Enum.TryParse <DatabaseEdition>(database.Edition, true, out edition); Edition = edition; RequestedServiceObjectiveId = database.RequestedServiceObjectiveId.Value; Enum.TryParse <DatabaseReadScale>(database.ReadScale.ToString(), true, out readScale); ReadScale = readScale; }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model) { if (model.CreateMode.Equals("RestoreLongTermRetentionBackup", StringComparison.OrdinalIgnoreCase) && CultureInfo.CurrentCulture.CompareInfo.IndexOf(resourceId, "/providers/Microsoft.Sql", CompareOptions.IgnoreCase) >= 0) { // LongTermRetentionV2 Restore // Management.Sql.Models.Database database = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, resourceId, model); return(new AzureSqlDatabaseModel(resourceGroup, model.ServerName, database)); } else { DatabaseCreateOrUpdateParameters parameters = new DatabaseCreateOrUpdateParameters() { Location = model.Location, Properties = new DatabaseCreateOrUpdateProperties() { Edition = model.Edition == DatabaseEdition.None ? null : model.Edition.ToString(), RequestedServiceObjectiveId = model.RequestedServiceObjectiveId, ElasticPoolName = model.ElasticPoolName, RequestedServiceObjectiveName = model.RequestedServiceObjectiveName, SourceDatabaseId = resourceId, RecoveryServicesRecoveryPointResourceId = resourceId, RestorePointInTime = restorePointInTime, CreateMode = model.CreateMode } }; var resp = Communicator.LegacyRestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, parameters); return(AzureSqlDatabaseAdapter.CreateDatabaseModelFromResponse(resourceGroup, model.ServerName, resp)); } }
/// <summary> /// Creates UpgradeDatabaseHint from database object by using same edition and SLO from upgrade hint. /// </summary> /// <param name="database">Database object</param> /// <returns>Returns UpgradeDatabaseHint</returns> private RecommendedDatabaseProperties CreateUpgradeDatabaseHint(Management.Sql.Models.Database database) { return(new RecommendedDatabaseProperties() { Name = database.Name, TargetEdition = SloToEdition(database.Properties.UpgradeHint.TargetServiceLevelObjective), TargetServiceLevelObjective = database.Properties.UpgradeHint.TargetServiceLevelObjective }); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model) { // Construct the ARM resource Id of the pool string elasticPoolId = string.IsNullOrWhiteSpace(model.ElasticPoolName) ? null : AzureSqlDatabaseModel.PoolIdTemplate.FormatInvariant( _subscription.Id, resourceGroup, model.ServerName, model.ElasticPoolName); // Restore database var dbModel = new Management.Sql.Models.Database() { Location = model.Location, CreateMode = model.CreateMode, RestorePointInTime = restorePointInTime, ElasticPoolId = elasticPoolId, Sku = string.IsNullOrWhiteSpace(model.SkuName) ? null : new Management.Sql.Models.Sku() { Name = model.SkuName, Tier = model.Edition, Family = model.Family, Capacity = model.Capacity }, LicenseType = model.LicenseType }; if (model.CreateMode.Equals(Management.Sql.Models.CreateMode.Recovery)) { dbModel.SourceDatabaseId = resourceId; dbModel.RecoverableDatabaseId = resourceId; dbModel.RecoveryServicesRecoveryPointId = resourceId; } else if (model.CreateMode.Equals(Management.Sql.Models.CreateMode.Restore)) { dbModel.RestorableDroppedDatabaseId = resourceId; dbModel.RecoveryServicesRecoveryPointId = resourceId; } else if (model.CreateMode.Equals(Management.Sql.Models.CreateMode.RestoreLongTermRetentionBackup) && resourceId.Contains("/providers/Microsoft.Sql")) { // LTR V2 dbModel.LongTermRetentionBackupResourceId = resourceId; dbModel.SourceDatabaseId = resourceId; } else { dbModel.SourceDatabaseId = resourceId; dbModel.RecoveryServicesRecoveryPointId = resourceId; } Management.Sql.Models.Database database = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, dbModel); return(new AzureSqlDatabaseModel(resourceGroup, model.ServerName, database)); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model) { // Construct the ARM resource Id of the pool string elasticPoolId = string.IsNullOrWhiteSpace(model.ElasticPoolName) ? null : AzureSqlDatabaseModel.PoolIdTemplate.FormatInvariant( _subscription.Id, resourceGroup, model.ServerName, model.ElasticPoolName); // Restore database var dbModel = new Management.Sql.Models.Database() { Location = model.Location, CreateMode = model.CreateMode, RestorePointInTime = restorePointInTime, ElasticPoolId = elasticPoolId, Sku = string.IsNullOrWhiteSpace(model.SkuName) ? null : new Management.Sql.Models.Sku() { Name = model.SkuName, Tier = model.Edition, Family = model.Family, Capacity = model.Capacity }, LicenseType = model.LicenseType, RequestedBackupStorageRedundancy = model.RequestedBackupStorageRedundancy, ZoneRedundant = model.ZoneRedundant, }; if (model.CreateMode == Management.Sql.Models.CreateMode.Recovery) { dbModel.RecoverableDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.Restore) { dbModel.RestorableDroppedDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.PointInTimeRestore) { dbModel.SourceDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.RestoreLongTermRetentionBackup) { dbModel.LongTermRetentionBackupResourceId = resourceId; } else { throw new ArgumentException("Restore mode not supported"); } Management.Sql.Models.Database database = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, dbModel); return(new AzureSqlDatabaseModel(resourceGroup, model.ServerName, database)); }
private bool IsDatabaseInServiceTierForPolicy(DatabaseAuditingPolicyModel model, string clientId) { AzureSqlDatabaseCommunicator dbCommunicator = new AzureSqlDatabaseCommunicator(Context); Management.Sql.Models.Database database = dbCommunicator.Get(model.ResourceGroupName, model.ServerName, model.DatabaseName, clientId); DatabaseEdition edition = DatabaseEdition.None; Enum.TryParse<DatabaseEdition>(database.Properties.Edition, true, out edition); if (edition == DatabaseEdition.Basic || edition == DatabaseEdition.Standard || edition == DatabaseEdition.Premium || edition == DatabaseEdition.DataWarehouse) { return true; } return false; }
/// <summary> /// Construct AzureSqlDatabaseModel from Management.Sql.Database object /// </summary> /// <param name="resourceGroup">Resource group</param> /// <param name="serverName">Server name</param> /// <param name="database">Database object</param> public AzureSqlDatabaseModel(string resourceGroup, string serverName, Management.Sql.Models.Database database) { ResourceGroupName = resourceGroup; ServerName = serverName; CollationName = database.Collation; CreationDate = database.CreationDate.Value; MaxSizeBytes = (long)database.MaxSizeBytes; DatabaseName = database.Name; Status = database.Status; Tags = TagsConversionHelper.CreateTagDictionary(TagsConversionHelper.CreateTagHashtable(database.Tags), false); ElasticPoolName = database.ElasticPoolName; Location = database.Location; ResourceId = database.Id; CreateMode = database.CreateMode; EarliestRestoreDate = database.EarliestRestoreDate; CurrentServiceObjectiveName = database.CurrentServiceObjectiveName; DatabaseId = database.DatabaseId.Value; Edition = database.Edition; RequestedServiceObjectiveName = database.RequestedServiceObjectiveName; DatabaseReadScale readScale; if (Enum.TryParse <DatabaseReadScale>(database.ReadScale.ToString(), true, out readScale)) { ReadScale = readScale; } ZoneRedundant = database.ZoneRedundant; Capacity = database.Sku == null ? (int?)null : database.Sku.Capacity; Family = database.Sku == null ? null : database.Sku.Family; SkuName = database.Sku == null ? null : database.Sku.Name; LicenseType = database.LicenseType; AutoPauseDelayInMinutes = database.AutoPauseDelay; MinimumCapacity = database.MinCapacity; HighAvailabilityReplicaCount = database.HighAvailabilityReplicaCount; CurrentBackupStorageRedundancy = database.CurrentBackupStorageRedundancy; RequestedBackupStorageRedundancy = database.RequestedBackupStorageRedundancy; SecondaryType = database.SecondaryType; MaintenanceConfigurationId = database.MaintenanceConfigurationId; EnableLedger = database.IsLedgerOn; }
/// <summary> /// Construct AzureSqlDatabaseModel from Management.Sql.Database object /// </summary> /// <param name="resourceGroup">Resource group</param> /// <param name="serverName">Server name</param> /// <param name="database">Database object</param> public AzureSqlDatabaseModel(string resourceGroup, string serverName, Management.Sql.Models.Database database) { DatabaseReadScale readScale = DatabaseReadScale.Enabled; ResourceGroupName = resourceGroup; ServerName = serverName; CollationName = database.Collation; CreationDate = database.CreationDate.Value; MaxSizeBytes = (long)database.MaxSizeBytes; DatabaseName = database.Name; Status = database.Status; Tags = TagsConversionHelper.CreateTagDictionary(TagsConversionHelper.CreateTagHashtable(database.Tags), false); ElasticPoolName = database.ElasticPoolName; Location = database.Location; ResourceId = database.Id; CreateMode = database.CreateMode; EarliestRestoreDate = database.EarliestRestoreDate; CurrentServiceObjectiveName = database.CurrentServiceObjectiveName; DatabaseId = database.DatabaseId.Value; Edition = database.Edition; RequestedServiceObjectiveName = database.RequestedServiceObjectiveName; Enum.TryParse <DatabaseReadScale>(database.ReadScale.ToString(), true, out readScale); ReadScale = readScale; ZoneRedundant = database.ZoneRedundant; Capacity = database.Sku == null ? (int?)null : database.Sku.Capacity; Family = database.Sku == null ? null : database.Sku.Family; SkuName = database.Sku == null ? null : database.Sku.Name; LicenseType = database.LicenseType; }
/// <summary> /// Converts the response from the service to a powershell database object /// </summary> /// <param name="resourceGroup">The resource group the server is in</param> /// <param name="serverName">The name of the Azure Sql Database Server</param> /// <param name="database">The service response</param> /// <returns>The converted model</returns> public static AzureSqlDatabaseModel CreateDatabaseModelFromResponse(string resourceGroup, string serverName, Management.Sql.Models.Database database) { return(new AzureSqlDatabaseModel(resourceGroup, serverName, database)); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="serverName">The name of the Azure SQL Server</param> /// <param name="databaseName">The name of the Azure SQL database</param> /// <param name="model">Sql Database Model with required parameters</param> /// <returns>Restored database object</returns> public Management.Sql.Models.Database RestoreDatabase(string resourceGroupName, string serverName, string databaseName, Management.Sql.Models.Database model) { return(GetCurrentSqlClient().Databases.CreateOrUpdate(resourceGroupName, serverName, databaseName, model)); }
/// <summary> /// Converts the response from the service to a powershell DatabaseCopy object /// </summary> /// <param name="copyResourceGroup">The copy's resource group name</param> /// <param name="copyServerName">The copy's Azure SQL Server name</param> /// <param name="resourceGroupName">The source's resource group name</param> /// <param name="serverName">The source's Azure SQL Server name</param> /// <param name="databaseName">The source database name</param> /// <param name="response">The database create response</param> /// <returns>A powershell DatabaseCopy object</returns> private AzureSqlDatabaseCopyModel CreateDatabaseCopyModelFromResponse(string copyResourceGroup, string copyServerName, string resourceGroupName, string serverName, string databaseName, Management.Sql.Models.Database database) { AzureSqlDatabaseCopyModel model = new AzureSqlDatabaseCopyModel(); model.CopyResourceGroupName = copyResourceGroup; model.CopyServerName = copyServerName; model.CopyDatabaseName = database.Name; model.ResourceGroupName = resourceGroupName; model.ServerName = serverName; model.DatabaseName = databaseName; model.Location = GetServerLocation(resourceGroupName, serverName); model.CopyLocation = database.Location; model.CreationDate = database.CreationDate.Value; model.LicenseType = database.LicenseType; return(model); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <param name="isCrossSubscriptionRestore">Is cross subscription restore</param> /// <param name="customHeaders">Custom headers</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model, bool isCrossSubscriptionRestore, Dictionary <string, List <string> > customHeaders = null) { // Construct the ARM resource Id of the pool string elasticPoolId = string.IsNullOrWhiteSpace(model.ElasticPoolName) ? null : AzureSqlDatabaseModel.PoolIdTemplate.FormatInvariant( _subscription.Id, resourceGroup, model.ServerName, model.ElasticPoolName); // Restore database var dbModel = new Management.Sql.Models.Database() { Location = model.Location, CreateMode = model.CreateMode, RestorePointInTime = restorePointInTime, ElasticPoolId = elasticPoolId, Sku = string.IsNullOrWhiteSpace(model.SkuName) ? null : new Management.Sql.Models.Sku() { Name = model.SkuName, Tier = model.Edition, Family = model.Family, Capacity = model.Capacity }, LicenseType = model.LicenseType, RequestedBackupStorageRedundancy = model.RequestedBackupStorageRedundancy, ZoneRedundant = model.ZoneRedundant, }; // check if restore operation is cross subscription or same subscription if (isCrossSubscriptionRestore) { // cross subscription path if (dbModel.CreateMode != Management.Sql.Models.CreateMode.Recovery && dbModel.CreateMode != Management.Sql.Models.CreateMode.Restore && dbModel.CreateMode != Management.Sql.Models.CreateMode.PointInTimeRestore) { throw new ArgumentException("Restore mode not supported for cross subscription restore. Supported restore modes for cross subscription are Recovery, Restore, PointInTimeRestore."); } dbModel.SourceResourceId = resourceId; } else { // same subscription path if (model.CreateMode == Management.Sql.Models.CreateMode.Recovery) { dbModel.RecoverableDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.Restore) { dbModel.RestorableDroppedDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.PointInTimeRestore) { dbModel.SourceDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.RestoreLongTermRetentionBackup) { dbModel.LongTermRetentionBackupResourceId = resourceId; } else { throw new ArgumentException("Restore mode not supported"); } } Management.Sql.Models.Database database = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, dbModel, customHeaders); return(new AzureSqlDatabaseModel(resourceGroup, model.ServerName, database)); }
/// <summary> /// Construct AzureSqlDatabaseModelExpanded from Management.Sql.Models.Database object /// </summary> /// <param name="resourceGroup">Resource group</param> /// <param name="serverName">Server name</param> /// <param name="database">Database object</param> public AzureSqlDatabaseModelExpanded(string resourceGroup, string serverName, Management.Sql.Models.Database database) : base(resourceGroup, serverName, database) { if (database.Properties.ServiceTierAdvisors != null && database.Properties.ServiceTierAdvisors.Count > 0) { ServiceTierAdvisor = database.Properties.ServiceTierAdvisors[0].Properties; } }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="serverName">The name of the Azure SQL Server</param> /// <param name="databaseName">The name of the Azure SQL database</param> /// <param name="model">Sql Database Model with required parameters</param> /// <param name="customHeaders">Custom headers</param> /// <returns>Restored database object</returns> public Management.Sql.Models.Database RestoreDatabase(string resourceGroupName, string serverName, string databaseName, Management.Sql.Models.Database model, Dictionary <string, List <string> > customHeaders = null) { if (customHeaders == null) { // Execute the create call without the custom headers. return(GetCurrentSqlClient().Databases.CreateOrUpdate(resourceGroupName, serverName, databaseName, model)); } else { // Execute the create call and pass the custom headers. using (var _result = GetCurrentSqlClient().Databases.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, serverName, databaseName, model, customHeaders).ConfigureAwait(false).GetAwaiter().GetResult()) { return(_result.Body); } } }
/// <summary> /// Creates a copy of a Azure SQL Database with new Autorest SDK /// </summary> public Management.Sql.Models.Database CreateCopy(string resourceGroupName, string serverName, string databaseName, Management.Sql.Models.Database parameters) { return(GetCurrentSqlClient().Databases.CreateOrUpdate(resourceGroupName, serverName, databaseName, parameters)); }
/// <summary> /// Converts the response from the service to a powershell DatabaseCopy object /// </summary> /// <param name="copyResourceGroup">The copy's resource group name</param> /// <param name="copyServerName">The copy's Azure SQL Server name</param> /// <param name="resourceGroupName">The source's resource group name</param> /// <param name="serverName">The source's Azure SQL Server name</param> /// <param name="databaseName">The source database name</param> /// <param name="response">The database create response</param> /// <returns>A powershell DatabaseCopy object</returns> private AzureSqlDatabaseCopyModel CreateDatabaseCopyModelFromResponse(string copyResourceGroup, string copyServerName, string resourceGroupName, string serverName, string databaseName, Management.Sql.Models.Database database) { AzureSqlDatabaseCopyModel model = new AzureSqlDatabaseCopyModel(); model.CopyResourceGroupName = copyResourceGroup; model.CopyServerName = copyServerName; model.CopyDatabaseName = database.Name; model.ResourceGroupName = resourceGroupName; model.ServerName = serverName; model.DatabaseName = databaseName; model.Location = GetServerLocation(resourceGroupName, serverName); model.CopyLocation = database.Location; model.CreationDate = database.CreationDate.Value; model.LicenseType = database.LicenseType; model.BackupStorageRedundancy = MapInternalBackupStorageRedundancyToExternal(database.StorageAccountType); return(model); }
/// <summary> /// Converts the response from the service to a powershell database object /// </summary> /// <param name="resourceGroupName">The resource group the server is in</param> /// <param name="serverName">The name of the Azure Sql Database Server</param> /// <param name="database">The service response</param> /// <returns>The converted model</returns> public static AzureSqlDatabaseModel CreateDatabaseModelFromResponse(string resourceGroup, string serverName, Management.Sql.Models.Database database) { AzureSqlDatabaseModel model = new AzureSqlDatabaseModel(); Guid id = Guid.Empty; DatabaseEdition edition = DatabaseEdition.None; model.ResourceGroupName = resourceGroup; model.ServerName = serverName; model.CollationName = database.Properties.Collation; model.CreationDate = database.Properties.CreationDate; model.CurrentServiceLevelObjectiveName = database.Properties.ServiceObjective; model.MaxSizeBytes = database.Properties.MaxSizeBytes; model.DatabaseName = database.Name; model.Status = database.Properties.Status; model.Tags = database.Tags as Dictionary <string, string>; model.ElasticPoolName = database.Properties.ElasticPoolName; model.Location = database.Location; Guid.TryParse(database.Properties.CurrentServiceObjectiveId, out id); model.CurrentServiceObjectiveId = id; Guid.TryParse(database.Properties.DatabaseId, out id); model.DatabaseId = id; Enum.TryParse <DatabaseEdition>(database.Properties.Edition, true, out edition); model.Edition = edition; Guid.TryParse(database.Properties.RequestedServiceObjectiveId, out id); model.RequestedServiceObjectiveId = id; return(model); }