【发布时间】:2023-01-14 01:03:58
【问题描述】:
我正在开发一个连接到多个 CosmosDB 数据库以执行数据清理的 MVC。它根据调用查询方法的方法进行连接,因此 Cosmos 连接是在查询执行期间建立的。然后在查询执行完毕后将其丢弃。
我在这里实现了一个帮助程序服务,它应该返回一个 EndpointConfiguration 实例,我将使用它来连接和执行查询:
public static class ConfigurationService
{
public static EndpointConfiguration GetByName(string configKeyName)
{
var environmentName = "Development";
var config = new ConfigurationBuilder()
.AddJsonFile($"appsettings.{environmentName}.json")
.Build();
var section = config.GetSection("CosmosConnectionStrings");
var endpointConfiguration = section.Get<EndpointConfiguration>();
return endpointConfiguration;
}
}
模型:
public class EndpointConfiguration
{
public string DatabaseUrl { get; set; }
public string SourceDatabase { get; set; }
public string SourceContainer { get; set; }
}
问题是我的代码在创建对象时没有填充值:
public static async Task<List<EventDocument>> GetEventDocsWithQueryAsync(string queryString, [CallerMemberName] string memberName = "")
{
string databaseName = ResolveDatabaseFromCallingMethod(memberName); //returns string of "DatabaseCosmosDb1" or "DatabaseCosmosDb2"
var settings = ConfigurationService.GetByName(databaseName); //always null
CosmosClient client = new CosmosClient(settings.DatabaseUrl, new CosmosClientOptions()
{
ConnectionMode = ConnectionMode.Gateway,
AllowBulkExecution = true
});
Container container = client.GetContainer(settings.SourceDatabase, settings.SourceContainer);
List<EventDocument> results = new List<EventDocument>();
using (FeedIterator<EventDocument> resultSetIterator = container.GetItemQueryIterator<EventDocument>(queryString))
{
while (resultSetIterator.HasMoreResults)
{
FeedResponse<EventDocument> response = await resultSetIterator.ReadNextAsync();
results.AddRange(response);
}
}
client.Dispose();
return results;
}
appsettings.Development.json:
"CosmosConnectionStrings": {
"DatabaseCosmosDb1": {
"DatabaseUrl": "AccountEndpoint=[endpoint]",
"SourceDatabase": "DatabaseA",
"SourceContainer": "EventsA"
},
"DatabaseCosmosDb2": {
"DatabaseUrl": "AccountEndpoint=[endpoint]",
"SourceDatabase": "DatabaseB",
"SourceContainer": "EventsB"
}
}
如何解决此问题以在方法期间获取数据库连接变量?
【问题讨论】:
-
为什么不为 CosmosConnectionStrings 使用一个简单的数组?
标签: c# asp.net-mvc azure-cosmosdb