/// <summary> /// Multi-tenant update/save entity /// </summary> protected async Task SaveTenantMappings(Device device, DeviceModel model) { device.LimitedToTenants = model.SelectedTenantIds.Any(); var existingTenantMappings = await _tenantMappingService.GetTenantMappings(device); var tenants = await _tenantService.GetTenantsAsync(); foreach (var tenant in tenants) { if (model.SelectedTenantIds.Contains(tenant.Id)) { //new tenant if (existingTenantMappings.Count(tm => tm.TenantId == tenant.Id) == 0) { await _tenantMappingService.InsertTenantMapping(device, tenant.Id); } } else { //remove tenant var tenantMappingToDelete = existingTenantMappings.FirstOrDefault(tm => tm.TenantId == tenant.Id); if (tenantMappingToDelete != null) { await _tenantMappingService.DeleteTenantMapping(tenantMappingToDelete); } } } }
protected async Task UpdateTenantMappings <TEntity>(TEntity entity, List <int> passedTenantIds) where TEntity : BaseEntity, ITenantMappingSupported { if (passedTenantIds == null) { return; } entity.LimitedToTenants = passedTenantIds.Any(); var existingTenantMappings = await TenantMappingService.GetTenantMappings(entity); var tenants = await TenantService.GetTenantsAsync(); foreach (var tenant in tenants) { if (passedTenantIds.Contains(tenant.Id)) { //new tenant if (existingTenantMappings.Count(sm => sm.TenantId == tenant.Id) == 0) { await TenantMappingService.InsertTenantMapping(entity, tenant.Id); } } else { //remove tenant var tenantMappingToDelete = existingTenantMappings.FirstOrDefault(sm => sm.TenantId == tenant.Id); if (tenantMappingToDelete != null) { await TenantMappingService.DeleteTenantMapping(tenantMappingToDelete); } } } }