C# 从.NET Core向Azure Cosmos DB批量上载/导入JSON文件

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文件。我想在创建一个json文件后立即将其导入Azure Cosmos DB

是否有某种方法可以从.NET核心代码中实现它


提前谢谢

以下是您如何在架构上处理此场景的方法,它将是可扩展的,并且符合指导原则:

在.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};在项目中使用网关连接。有关详细信息,请参阅