当前位置:网站首页>Azure Cosmos DB (五) .Net Core 控制台应用

Azure Cosmos DB (五) .Net Core 控制台应用

2020-12-07 15:40:29 Grant_Allen

一,引言

  之前在讲Azure CosmosDB Core(SQL)核心的时候,使用了EF Core 的方式,引用了 “Microsoft.EntityFrameworkCore.Cosmos” 的NuGet包,而今天来个简单的,使用 "Microsoft.Azure.Cosmos" 来操作CosmosDB,通过控制台来写一个简单的Demo。

--------------------我是分割线--------------------

1,Azure Cosmos DB (一) 入门介绍

2,Azure Cosmos DB (二) SQL API 操作

3,Azure Cosmos DB (三) EF Core 操作CURD Demo

4,Azure Cosmos DB (四) 使用EF的SQL API 异地冗余

5,Azure Cosmos DB (五)  .Net Core Console

二,正文

1,安装依赖项

安装对Cosmos DB 的依赖 "Microsoft.Azure.Cosmos"

使用程序包管理控制台进行安装:

Install-Package Microsoft.Azure.Cosmos -Version 3.15.0

其他程序包:

Install-Package Microsoft.Extensions.Configuration -Version 3.1.0
Install-Package Microsoft.Extensions.Configuration.FileExtensions -Version 3.1.0
Install-Package Microsoft.Extensions.Configuration.Json -Version 3.1.0

2,获取CosmosClient,Database,Container 对象

 #region Create CosmosClient
 this.cosmosClient = new CosmosClient(Appsettings.app("CosmosDB", "Endpoint"), Appsettings.app("CosmosDB", "Key")); 
 #endregion

 #region Create CosmosDB
 this.database = await this.cosmosClient.CreateDatabaseIfNotExistsAsync(Appsettings.app("CosmosDB", "DataBase"));
 Console.WriteLine("Created Database:{0} Success\n", Appsettings.app("CosmosDB", "DataBase"));
 #endregion

 #region Create Container 
 this.container = await this.database.CreateContainerIfNotExistsAsync(Appsettings.app("CosmosDB", "Container"), "/id"); 
#endregion

3,针对于 Cosmos 的 CRUD 方法

3.1,数据初始化

 1 public async Task InitItem()
 2         {
 3             //Create a UserModel object for the Andersen family
 4             var user1 = new UserModel
 5             {
 6                 Id = "1",
 7                 Name = "张无忌",
 8                 Age = 12,
 9                 Address = "北京市西城区鲍家街43号",
10                 Remark = "中央音乐学院"
11             };
12 
13             var user2 = new UserModel
14             {
15                 Id = "2",
16                 Name = "令狐冲",
17                 Age = 20,
18                 Address = "佛山市南海区灯湖东路6号",
19                 Remark = "广发商学院"
20             };
21 
22             #region Query User1 of '张无忌'
23             var user1s = await QueryItems(user1.Name);
24             #endregion
25 
26 
27             #region Add User1 Item
28             if (user1s.Count <= 0)
29             {
30                 ItemResponse<UserModel> user1Response = await this.container.CreateItemAsync<UserModel>(user1, new PartitionKey(user1.Id));
31 
32                 Console.WriteLine("Created Item in database with id:{0} Operation consumed {1} RUs.\n", user1Response.Resource.Id, user1Response.StatusCode);
33             }
34             #endregion
35 
36 
37             #region Query User2 of '令狐冲'
38             var user2s = await QueryItems(user2.Name);
39             #endregion
40 
41             #region Add User2 Item
42             if (user2s.Count <= 0)
43             {
44                 ItemResponse<UserModel> user2Response = await this.container.CreateItemAsync<UserModel>(user2, new PartitionKey(user2.Id));
45 
46                 Console.WriteLine("Created Item in database with id:{0} Operation consumed {1} RUs.\n", user2Response.Resource.Id, user2Response.StatusCode);
47             }
48             #endregion
49         }
InitItem

3.2,数据查询

 1 public async Task<List<UserModel>> QueryItems(string name)
 2         {
 3             var sqlQueryText = "SELECT * FROM c where 1=1";
 4 
 5             if (!string.IsNullOrEmpty(name))
 6             {
 7                 sqlQueryText += " and c.Name='" + name + "'";
 8             }
 9 
10             Console.WriteLine("Running query: {0}\n", sqlQueryText);
11 
12             QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText);
13 
14             var users = new List<UserModel>();
15             var queryUsers = this.container.GetItemQueryIterator<UserModel>(queryDefinition);
16 
17 
18             while (queryUsers.HasMoreResults)
19             {
20                 FeedResponse<UserModel> currentResultSet = await queryUsers.ReadNextAsync();
21                 foreach (UserModel user in currentResultSet)
22                 {
23                     Console.WriteLine("\tRead {0}\n", user.Name);
24                     users.Add(user);
25                 }
26             }
27             return users;
28         }
QuertItem

3.3 数据修改

1 public async Task ModifyItem(string name)
2         {
3             var users = await QueryItems(name);
4 
5             var modifyUser = users.FirstOrDefault();
6             modifyUser.Address = "上海市静安区石板街73弄";
7            var modifyResponse= await this.container.ReplaceItemAsync<UserModel>(modifyUser, modifyUser.Id, new PartitionKey(modifyUser.Id));
8             Console.WriteLine("name equal to '"+name+"',his family address modify {0}\n", modifyResponse.StatusCode==HttpStatusCode.OK?"success":"fail");
9         }
ModifyItem

3.4 数据删除

1 public async Task DeleteItem(string name)
2         {
3             var users= await QueryItems(name);
4 
5            var deleteResponse= await this.container.DeleteItemAsync<UserModel>(users.First().Id, new PartitionKey(users.First().Id));
6 
7             Console.WriteLine("delete'" + name + " item'{0}\n", deleteResponse.StatusCode == HttpStatusCode.NoContent ? "success" : "fail");
8         }
DeleteItem

完整代码请查看文章底部的 github 地址

4,测试结果

首先我们在执行查询操作的代码处打上断点,同时在 main 方法中可以看到我们依次执行的是

1)初始化数据-----> 2) 查看数据-----》3) 修改数据-----》4)删除数据

运行项目,我们回到 Azure Portal 上看到创建好的 "cnbateblogweb-cosmosdb" 的 Azure CosmosDB,点击 “Data Explorer” 查看刚刚初始化好的数据

对比一下控制台打印出来的日志信息,可以看到已经初始化数据库,容器,以及 Item 项。

VS 点击 “F10” 之前先看看名字叫 “令狐冲” 的Item 的地址

F10之后,执行修改操作后,进行查看当前数据,观察是否进行更改了

VS 中继续点击 “F10” 执行删除操作,可以看到在Azure Portal 中已经找不到 “令狐冲” 这条数据了,同样的控制台的日志中显示 “令狐冲” 这条数据已被删除了。

Bingo!!!成功

对于Azure CosmosDB 的增删改查的操作已完成,对于以上操作,大家可以自行进行封装使用。

三,结尾

  今天我们完成了使用 “Microsoft.Azure.Cosmos” 来操作Azure CosmosDB ,并且通过一个Demo演示了对 Azure Cosmos DB 进程操作,生产种子数据,以及对数据库中的数据如何做增加,删除,修改,查询等操作。同时也是对Azure CosmosDB 的技术操作的一个回顾。本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,还包含,并且指出不足之处!!!!!**,°*:.*( ̄▽ ̄)/$:*.°** 。

参考链接:https://docs.azure.cn/zh-cn/cosmos-db/

github:https://github.com/yunqian44/Azure.CosmosDB.git

作者:Allen 

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

版权声明
本文为[Grant_Allen]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/AllenMaster/p/14049187.html