Azure Cosmos DB (五) .Net Core 控制檯應用

Grant_Allen發表於2020-12-07

一,引言

  之前在講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,資料初始化

Azure Cosmos DB (五)  .Net Core 控制檯應用
 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,資料查詢

Azure Cosmos DB (五)  .Net Core 控制檯應用
 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 資料修改

Azure Cosmos DB (五)  .Net Core 控制檯應用
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 資料刪除

Azure Cosmos DB (五)  .Net Core 控制檯應用
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 

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。

相關文章