C# 从.NET Core向Azure Cosmos DB批量上载/导入JSON文件
我正在.NET核心应用程序中生成一些JSON文件。我想在创建一个json文件后立即将其导入Azure Cosmos DB 是否有某种方法可以从.NET核心代码中实现它C# 从.NET Core向Azure Cosmos DB批量上载/导入JSON文件,c#,.net-core,azure-cosmosdb,C#,.net Core,Azure Cosmosdb,我正在.NET核心应用程序中生成一些JSON文件。我想在创建一个json文件后立即将其导入Azure Cosmos DB 是否有某种方法可以从.NET核心代码中实现它 提前谢谢 以下是您如何在架构上处理此场景的方法,它将是可扩展的,并且符合指导原则: 在.Net核心应用程序中,当您创建json文件时,将其存储在Azure blob存储中 作为下一步,您可以使用Azure blob存储触发器创建Azure函数,您可以检查此链接以获取参考: 通过azure函数,您可以配置使用BulkImport.n
提前谢谢 以下是您如何在架构上处理此场景的方法,它将是可扩展的,并且符合指导原则: 在.Net核心应用程序中,当您创建json文件时,将其存储在Azure blob存储中 作为下一步,您可以使用Azure blob存储触发器创建Azure函数,您可以检查此链接以获取参考: 通过azure函数,您可以配置使用BulkImport.net库更新cosmos db中的记录。 BulkImportResponse BulkImportResponse=等待bulkExecutor.BulkImportAsync 文档:documentsToImportInBatch, 使能插入:正确, disableAutomaticIdGeneration:没错, maxConcurrencyPerPartitionKeyRange:null, maxInMemorySortingBatchSize:null,
取消令牌:令牌 以下是您如何在架构上处理此场景,该场景将是可扩展的,并且符合指导原则: 在.Net核心应用程序中,当您创建json文件时,将其存储在Azure blob存储中 作为下一步,您可以使用Azure blob存储触发器创建Azure函数,您可以检查此链接以获取参考: 通过azure函数,您可以配置使用BulkImport.net库更新cosmos db中的记录。 BulkImportResponse BulkImportResponse=等待bulkExecutor.BulkImportAsync 文档:documentsToImportInBatch, 使能插入:正确, disableAutomaticIdGeneration:没错, maxConcurrencyPerPartitionKeyRange:null, maxInMemorySortingBatchSize:null,
取消令牌:令牌 根据我的测试,如果您想在.Net核心应用程序中使用Cosmos DB Bulk insert,您需要使用.Net CosmosDB SDK V3,其版本必须大于3.4.0。有关更多详细信息,请参阅 My.json文件 我的代码
private const string EndpointUrl = "";
private const string AuthorizationKey = "";
private const string DatabaseName = "testbulk";
private const string ContainerName = "items";
async static Task Main(string[] args)
{
string json = File.ReadAllText(@"E:\test.json");
List<Item> lists = JsonConvert.DeserializeObject<List<Item>>(json);
CosmosClientOptions options = new CosmosClientOptions() { AllowBulkExecution = true };
CosmosClient cosmosClient = new CosmosClient(EndpointUrl, AuthorizationKey,options);
Database database = await cosmosClient.CreateDatabaseIfNotExistsAsync(DatabaseName);
Console.WriteLine(database.Id);
Container container = await database.CreateContainerIfNotExistsAsync(ContainerName, "/id");
Console.WriteLine(container.Id);
List<Task> tasks = new List<Task>();
foreach (Item item in lists)
{
tasks.Add(container.CreateItemAsync(item, new PartitionKey(item.Id))
.ContinueWith((Task<ItemResponse<Item>> task) =>
{
Console.WriteLine("Status: " + task.Result.StatusCode + " Resource: "+ task.Result.Resource.Id );
}));
}
await Task.WhenAll(tasks);
}
class Item {
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "age")]
public string Age { get; set; }
}
class Program
{
private const string EndpointUrl = "";
private const string AuthorizationKey = "";
private const string DatabaseName = "testbulk";
private const string ContainerName = "items";
async static Task Main(string[] args)
{
string json = File.ReadAllText(@"E:\test.json");
List<Item> lists = JsonConvert.DeserializeObject<List<Item>>(json);
CosmosClientOptions options = new CosmosClientOptions() { AllowBulkExecution = true };
CosmosClient cosmosClient = new CosmosClient(EndpointUrl, AuthorizationKey, options);
Database database = await cosmosClient.CreateDatabaseIfNotExistsAsync(DatabaseName);
Console.WriteLine(database.Id);
Container container = await database.CreateContainerIfNotExistsAsync(ContainerName, "/id");
Console.WriteLine(container.Id);
List<Task> tasks = new List<Task>();
foreach (Item item in lists)
{
tasks.Add(container.CreateItemAsync(item, new PartitionKey(item.Id))
.ContinueWith((Task<ItemResponse<Item>> task) =>
{
Console.WriteLine("Status: " + task.Result.StatusCode + " Resource: " + task.Result.Resource.Id);
}));
}
await Task.WhenAll(tasks);
Console.ReadLine();
}
class Item
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "age")]
public string Age { get; set; }
}
}
根据我的测试,如果您想在.Net核心应用程序中使用Cosmos DB Bulk insert,您需要使用.Net CosmosDB SDK V3,其版本必须大于3.4.0。有关更多详细信息,请参阅 My.json文件 我的代码
private const string EndpointUrl = "";
private const string AuthorizationKey = "";
private const string DatabaseName = "testbulk";
private const string ContainerName = "items";
async static Task Main(string[] args)
{
string json = File.ReadAllText(@"E:\test.json");
List<Item> lists = JsonConvert.DeserializeObject<List<Item>>(json);
CosmosClientOptions options = new CosmosClientOptions() { AllowBulkExecution = true };
CosmosClient cosmosClient = new CosmosClient(EndpointUrl, AuthorizationKey,options);
Database database = await cosmosClient.CreateDatabaseIfNotExistsAsync(DatabaseName);
Console.WriteLine(database.Id);
Container container = await database.CreateContainerIfNotExistsAsync(ContainerName, "/id");
Console.WriteLine(container.Id);
List<Task> tasks = new List<Task>();
foreach (Item item in lists)
{
tasks.Add(container.CreateItemAsync(item, new PartitionKey(item.Id))
.ContinueWith((Task<ItemResponse<Item>> task) =>
{
Console.WriteLine("Status: " + task.Result.StatusCode + " Resource: "+ task.Result.Resource.Id );
}));
}
await Task.WhenAll(tasks);
}
class Item {
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "age")]
public string Age { get; set; }
}
class Program
{
private const string EndpointUrl = "";
private const string AuthorizationKey = "";
private const string DatabaseName = "testbulk";
private const string ContainerName = "items";
async static Task Main(string[] args)
{
string json = File.ReadAllText(@"E:\test.json");
List<Item> lists = JsonConvert.DeserializeObject<List<Item>>(json);
CosmosClientOptions options = new CosmosClientOptions() { AllowBulkExecution = true };
CosmosClient cosmosClient = new CosmosClient(EndpointUrl, AuthorizationKey, options);
Database database = await cosmosClient.CreateDatabaseIfNotExistsAsync(DatabaseName);
Console.WriteLine(database.Id);
Container container = await database.CreateContainerIfNotExistsAsync(ContainerName, "/id");
Console.WriteLine(container.Id);
List<Task> tasks = new List<Task>();
foreach (Item item in lists)
{
tasks.Add(container.CreateItemAsync(item, new PartitionKey(item.Id))
.ContinueWith((Task<ItemResponse<Item>> task) =>
{
Console.WriteLine("Status: " + task.Result.StatusCode + " Resource: " + task.Result.Resource.Id);
}));
}
await Task.WhenAll(tasks);
Console.ReadLine();
}
class Item
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "age")]
public string Age { get; set; }
}
}
Bulk Executor针对SDK V2,SDK V3将Bulk作为SDK的一部分,不需要额外的库,Bulk Executor针对SDK V2,SDK V3将Bulk作为SDK的一部分,不需要额外的库,它将提供以下异常:mscorlib.dll中发生类型为“Microsoft.Azure.Cosmos.CosmosException”的未处理异常。您需要找到AsyncMethodBuilder.cs来查看当前调用堆栈框架的源代码。@aarohi-001您能提供代码并告诉我.net核心版本和Cosmos SDK版本吗?目前我正在.net 4.6.1中尝试。希望代码也适用于.Net。我正在使用您提供的代码。@aarohi-001您参考过吗?@aarohi-001关于这个问题,请尝试添加代码var options=new CosmosClientOptions{ConnectionMode=ConnectionMode.Gateway};在项目中使用网关连接。有关更多详细信息,请参阅它正在提供以下异常:mscorlib.dll中发生类型为“Microsoft.Azure.Cosmos.CosmosException”的未处理异常。您需要找到AsyncMethodBuilder.cs来查看当前调用堆栈框架的源代码。@aarohi-001您能提供代码并告诉我.net核心版本和Cosmos SDK版本吗?目前我正在.net 4.6.1中尝试。希望代码也适用于.Net。我正在使用您提供的代码。@aarohi-001您参考过吗?@aarohi-001关于这个问题,请尝试添加代码var options=new CosmosClientOptions{ConnectionMode=ConnectionMode.Gateway};在项目中使用网关连接。有关详细信息,请参阅