2016-11-11 7 views
0

私のASP.NETコアアプリケーションでは、かなり多くのAzureサービスを使用しています。テーブルストレージ、DocumentDbなど初期化ルーチンの一環として、これらのデータベースが存在することを確認する必要があります。存在しない場合は作成する必要があります。ASP.NETコアアプリケーションでデータベースを初期化する

現在、以下のコードを使用してStartup.csのConfigureメソッドでこの初期化を処理しています。

// Initialize databases 
using (var serviceScope = app.ApplicationServices 
      .GetRequiredService<IServiceScopeFactory>() 
      .CreateScope()) 
      { 
      var blobClient = serviceScope.ServiceProvider.GetService<MyBlobStorageClient>(); 
      var dbClient = serviceScope.ServiceProvider.GetService<MyDocumentDbClient>(); 
      var tsClient = serviceScope.ServiceProvider.GetService<MyTableStorage.TableStorageClient>(); 
      MyInitializer(blobClient, dbClient, tsClient).Wait(); 
      } 

ここで私の初期設定を処理する必要がありますか?

答えて

1

あなたのコードを利用してAzureサービスを初期化することができます。また、StorageClient/DocumentDbClientのシングルトンサービスを追加して、サービスが存在するかどうかを確認し、Azureサービスに対してCURD操作を実行する前に特定のリソースを作成することもできます。私のAzureBlobStorageClientのコードスニペットはこちらを参照してください。

Startup.cs

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddOptions(); 
    services.Configure<AzureStorageConfig>(Configuration.GetSection("AzureStorageConfig")); 
    services.AddSingleton<AzureBlobStorageClient>(); 
    services.AddMvc(); 
} 

appsettings.json

"AzureStorageConfig": { 
    "AccountName": "<your-storage-account-name>", 
    "AccountKey": "<your-storage-account-key>" 
} 

AzureBlobStorageClient.cs

public class AzureBlobStorageClient 
{ 
    private CloudBlobClient _cloudBlobClient; 
    public AzureBlobStorageClient(IOptions<AzureStorageConfig> config) 
    { 
     var storageAccount = new CloudStorageAccount(new StorageCredentials(config.Value.AccountName, config.Value.AccountKey), true); 
     _cloudBlobClient=storageAccount.CreateCloudBlobClient(); 
    } 

    public async Task<bool> EnsureContainer(string containerName) 
    { 
     var storageContainer = _cloudBlobClient.GetContainerReference(containerName); 
     return await storageContainer.CreateIfNotExistsAsync(); 
    } 
} 

public class AzureStorageConfig 
{ 
    public string AccountName { get; set; } 
    public string AccountKey { get; set; } 
} 

AzureStorageController.cs

[Route("api/[controller]")] 
[Authorize] 
public class AzureStorageController : Controller 
{ 
    private AzureBlobStorageClient _storageClient; 
    public ValuesController(AzureBlobStorageClient storageClient) 
    { 
     _storageClient = storageClient; 
    } 

    [HttpGet] 
    public async Task<string> Get() 
    { 
     //_storageClient.EnsureContainer("<blob-container-name>"); 
     return await Task.FromResult("hello world"); 
    } 
} 
関連する問題