質問: await context.Database.EnsureCreatedAsync(); ``` 例外: > Microsoft.EntityFrameworkCore.Cosmos.Storage.Internal.CosmosClient.CreateDocumentCollectionIfNotExistsOnceAsync(DbContext _、String collectionId、CancellationToken cancelToken)でのBadRequest > Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync [TState、TResult](Func `4 operation, Func` 4 verifySucceeded、TState状態、CancellationToken cancelToken) > Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync [TSTATE、TResult](機能で`4 operation, Func`インフラでMicrosoft.EntityFrameworkCore.Cosmos.Storage.Internal.CosmosDatabaseCreator.EnsureCreatedAsync(CancellationToken cancellationToken)で4 verifySucceeded、TSTATE状態、CancellationToken cancellationToken) Infrastructure \ SystemDataContextSeed.csの.SystemDataContextSeed.SeedAsync(SystemDataContext context):Extensions \ IWebHostExtensions.csのxtensions.IWebHostExtensions.Seed(IWebHost webhost)の21行目:Apiの23行目<> c__DisplayClass1_0.b__1(リスナーリスナーの近くにはリスナー) AccountApi.cs:)行47、Microsoft.ServiceFabric.Services.Communication.AspNetCore.AspNetCoreCommunicationListener.OpenAsync(CancellationToken cancelToken)でMicrosoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.OpenCommunicationLenlationTen CancelAllAptionSentryAllConstellingCancelicationTokenAndAll() > > 私が試したこと: * ログ分析を分析します。これらの要求のログは表示されません。 * EnsureCreatedを削除してデータを直接挿入する * コレクションを手動で作成する(SystemDataContext) * データベースを手動で作成します(AccountService) * Azureのネットワークファイアウォール(すべてのネットワークを許可)の削除 使用されるエンドポイントの詳細は次の形式です。 ``` "Cosmos": { "EndPoint": "https://xxxx-sqlapi.documents.azure.com:443", "AuthKey": "xxx==", "DatabaseName": "AccountService" }, ``` Cosmos DBプロバイダを接続するための拡張メソッド: ``` public static IServiceCollection AddCosmosSettings(this IServiceCollection services, IConfiguration configuration) { services.AddEntityFrameworkCosmos() .AddDbContext(options => { options.UseCosmos(configuration["Cosmos:EndPoint"], configuration["Cosmos:AuthKey"], configuration["Cosmos:DatabaseName"]); ; }, ServiceLifetime.Scoped //Showing explicitly that the DbContext is shared across the HTTP request scope (graph of objects started in the HTTP request) ); return services; } ``` 任意のアイデアは大歓迎です!
回答: 参考までに、EF Core 2.2のCosmos DBプロバイダーはプレビュー版であり、AzureがホストするCosmos DBに対する使用には適していません。これは、エミュレータにとっては問題にならないようなヘッダーが欠けている場所もあるが、Azureに対して実行すると400が発生するためです。 私が最も長く見ていたのは、文書コレクションを作成しようとしたときに400が得られたという事実でした。 EFコアのソースコードを調べたところ、パーティションキーが送信されていないことがわかりました。現在のCosmos DBの実装には、パーティションキーの実装はまったくありません。また、コレクション間で共有スループットを使用してAzureでデータベースを作成したため、どうやらコレクションレベルでパーティションキーを指定する必要があります。