private static async Task MaybeCreateDatabaseOnEmulatorAsync(DatabaseName databaseName) { // Try to create a database on the emulator and ignore any AlreadyExists error. var adminClientBuilder = new DatabaseAdminClientBuilder { EmulatorDetection = EmulatorDetection.EmulatorOnly }; var databaseAdminClient = await adminClientBuilder.BuildAsync(); var instanceName = InstanceName.FromProjectInstance(databaseName.ProjectId, databaseName.InstanceId); try { await databaseAdminClient.CreateDatabase(new CreateDatabaseRequest { ParentAsInstanceName = instanceName, CreateStatement = $"CREATE DATABASE `{databaseName.DatabaseId}`", }).PollUntilCompletedAsync(); var connectionStringBuilder = new SpannerConnectionStringBuilder($"Data Source={databaseName}") { EmulatorDetection = EmulatorDetection.EmulatorOnly, }; await CreateSampleDataModel(connectionStringBuilder.ConnectionString); } catch (RpcException e) when(e.StatusCode == StatusCode.AlreadyExists) { // Ignore } }
/// <inheritdoc /> public override async Task <bool> ExistsAsync(CancellationToken cancellationToken = default) { try { var adminClientBuilder = new DatabaseAdminClientBuilder { EmulatorDetection = EmulatorDetection.EmulatorOrProduction }; var databaseAdminClient = await adminClientBuilder.BuildAsync(cancellationToken); await databaseAdminClient.GetDatabaseAsync(_connection.DbConnection.DataSource, cancellationToken); } catch (RpcException e) when(e.StatusCode == StatusCode.NotFound) { return(false); } return(true); }