Dotnet Core SDK를 사용한 Cosmos DB CRUD

Do you want to create dotnet csharp console app and write CRUD ( Create, Read, Update and Delete ) operations over Azure Cosmos DB noSQL data? Read this article to start from scratch and learn hands on coding on cosmos DB.


소개하다.


azure 개발 환경을 설정하지 않았다면 다음 글의 시작을 읽으십시오.
  • Get Free Sandbox Azure account for learning Azure
  • Creating Cosmos DB from DotNet Core Project
  • Cosmos 데이터베이스에서 문서 작성


    이제 dotnet core SDK를 사용하여 코스모스 데이터베이스에 문서를 만듭니다.우리는 DocumentClient Class 방법을 사용하여 문서를 만들 것이다.CreateDocumentAsync를 사용하여 Cosmos DB의 문서를 읽을 것입니다.
    ReadDocumentAsync

    CSharp 모델 정의하기


    서버에서 만들고 싶은 모델을 만듭니다.
    모델 폴더에 다음 클래스를 만듭니다.

    namespace azure_cosmos_db_example {
        public class CouponsUsed {
            public string CouponCode { get; set; }
    
        }
    }
    
    namespace azure_cosmos_db_example {
        public class OrderHistory {
            public string OrderId { get; set; }
            public string DateShipped { get; set; }
            public string Total { get; set; }
        }
    }
    
    namespace azure_cosmos_db_example {
        public class ShippingPreference {
            public int Priority { get; set; }
            public string AddressLine1 { get; set; }
            public string AddressLine2 { get; set; }
            public string City { get; set; }
            public string State { get; set; }
            public string ZipCode { get; set; }
            public string Country { get; set; }
        }
    }
    
    using Newtonsoft.Json;
    namespace azure_cosmos_db_example {
        public class User {
            [JsonProperty ("id")]
            public string Id { get; set; }
    
            [JsonProperty ("userId")]
            public string UserId { get; set; }
    
            [JsonProperty ("lastName")]
            public string LastName { get; set; }
    
            [JsonProperty ("firstName")]
            public string FirstName { get; set; }
    
            [JsonProperty ("email")]
            public string Email { get; set; }
    
            [JsonProperty ("dividend")]
            public string Dividend { get; set; }
    
            [JsonProperty ("OrderHistory")]
            public OrderHistory[] OrderHistory { get; set; }
    
            [JsonProperty ("ShippingPreference")]
            public ShippingPreference[] ShippingPreference { get; set; }
    
            [JsonProperty ("CouponsUsed")]
            public CouponsUsed[] Coupons { get; set; }
            public override string ToString () {
                return JsonConvert.SerializeObject (this);
            }
        }
    }
    
    

    문서 만들기(없는 경우)


    다음은 코스모스 db에서 이 문서를 만듭니다.
    우선, 문서가 존재하지 않는지 확인한 다음 이상을 던질 것입니다.catch 방법에서 새 문서를 만들 것입니다.
    프로그램에 다음 코드를 추가합니다.cs 파일.
    private async Task CreateUserDocumentIfNotExists (string databaseName, string collectionName, User user) {
        try {
            await this.client.ReadDocumentAsync (UriFactory.CreateDocumentUri (databaseName, collectionName, user.Id), new RequestOptions { PartitionKey = new PartitionKey (user.UserId) });
    
            this.WriteToConsoleAndPromptToContinue ("User {0} already exists in the database", user.Id);
        } catch (DocumentClientException de) {
            if (de.StatusCode == HttpStatusCode.NotFound) {
                await this.client.CreateDocumentAsync (UriFactory.CreateDocumentCollectionUri (databaseName, collectionName), user);
                this.WriteToConsoleAndPromptToContinue ("Created User {0}", user.Id);
            } else {
                throw;
            }
        }
    }
    
    private void WriteToConsoleAndPromptToContinue (string format, params object[] args) {
        Console.WriteLine (format, args);
        Console.WriteLine ("Press any key to continue ...");
        Console.ReadKey ();
    }
    
    

    Cosmos DB에 파종할 사용자 데이터 생성


    사용자 데이터 클래스를 만듭니다. 이 클래스에서cosmos DB에 삽입할 실례를 만듭니다.
    사용자 데이터.cs 파일
    namespace azure_cosmos_db_example {
    
        public class UserData {
           public User yanhe = new User {
                Id = "1",
                UserId = "yanhe",
                LastName = "He",
                FirstName = "Yan",
                Email = "[email protected]",
                OrderHistory = new OrderHistory[] {
                new OrderHistory {
                OrderId = "1000",
                DateShipped = "08/17/2018",
                Total = "52.49"
                }
                },
                ShippingPreference = new ShippingPreference[] {
                new ShippingPreference {
                Priority = 1,
                AddressLine1 = "90 W 8th St",
                City = "New York",
                State = "NY",
                ZipCode = "10001",
                Country = "USA"
                }
                },
            };
    
         public User nelapin = new User {
                Id = "2",
                UserId = "nelapin",
                LastName = "Pindakova",
                FirstName = "Nela",
                Email = "[email protected]",
                Dividend = "8.50",
                OrderHistory = new OrderHistory[] {
                new OrderHistory {
                OrderId = "1001",
                DateShipped = "08/17/2018",
                Total = "105.89"
                }
                },
                ShippingPreference = new ShippingPreference[] {
                new ShippingPreference {
                Priority = 1,
                AddressLine1 = "505 NW 5th St",
                City = "New York",
                State = "NY",
                ZipCode = "10001",
                Country = "USA"
                },
                new ShippingPreference {
                Priority = 2,
                AddressLine1 = "505 NW 5th St",
                City = "New York",
                State = "NY",
                ZipCode = "10001",
                Country = "USA"
                }
                },
                Coupons = new CouponsUsed[] {
                new CouponsUsed {
                CouponCode = "Fall2018"
                }
                }
            };
        }
    }
    
    

    데이터베이스 초기화 기간의 피드 설정 데이터


    DB가 초기화되는 동안 파종될 사용자 데이터를 만들 것입니다.
     private async Task InitializeDB () {
        this.client = new DocumentClient (new Uri (ConfigurationManager.AppSettings["accountEndpoint"]), ConfigurationManager.AppSettings["accountKey"]);
    
        await this.client.CreateDatabaseIfNotExistsAsync (new Database { Id = "customers" });
    
        await this.client.CreateDocumentCollectionIfNotExistsAsync (UriFactory.CreateDatabaseUri ("customers"), new DocumentCollection {
            Id = "users", PartitionKey = new PartitionKeyDefinition () { Paths = new System.Collections.ObjectModel.Collection<string> () { "/userId" } }
        });
    
        Console.WriteLine ("Database and collection creation/validation is complete");
    
        👇 // Creating Document //
        await this.CreateUserDocumentIfNotExists ("customers", "users", new UserData ().nelapin);
        await this.CreateUserDocumentIfNotExists ("customers", "users", new UserData ().yanhe);
    }
    
    

    프로그램을 실행하여 문서 작성


    프로젝트 실행dotnet run
    사용자 문서가 작성되었습니다.


    소스 코드 가져오기 Cosmos DB 즐겨찾기 읽기


    이 때 우리는 이미 코스모스 데이터베이스에 문서를 만들었다.지금은 이 서류들을 읽을 때다.

    사용자 문서 읽기


    다음은 Cosmos DB의 문서를 읽는 방법을 보여 드리겠습니다. . 우리는 Source Code 방법을 사용할 것이다.
     var userResource = await this.client.
     👉 ReadDocumentAsync (
       UriFactory.CreateDocumentUri (
         databaseName,
         collectionName,
         user.Id),
     new RequestOptions {
       PartitionKey = new PartitionKey (user.UserId)
       });
    
    
    ReadDocumentAsync

    readdocumentsync 방법 사용하기


    다음 코드에서, 나는 ReadDocumentAsync 방법을 호출한 후에 코스모스 DB에서 자원을 얻을 때까지 기다릴 것이다.다음에 나는 이 문서를 읽고 json에 서열화한 후에 컨트롤러에 표시할 것이다.
    
            private async Task ReadUserDocument (string databaseName, string collectionName, User user) {
                try {
                    var userResource = await this.client.ReadDocumentAsync (UriFactory.CreateDocumentUri (databaseName, collectionName, user.Id), new RequestOptions { PartitionKey = new PartitionKey (user.UserId) });
                    var userFromDb = userResource.Resource;
                    this.WriteToConsoleAndPromptToContinue ("Read user {0}", user.Id);
                    this.WriteToConsoleAndPromptToContinue ("Read user {0}", Newtonsoft.Json.JsonConvert.SerializeObject (userFromDb, Formatting.Indented));
                } catch (DocumentClientException de) {
                    if (de.StatusCode == HttpStatusCode.NotFound) {
                        this.WriteToConsoleAndPromptToContinue ("User {0} not read", user.Id);
                    } else {
                        throw;
                    }
                }
            }
    
    

    InitializeDB 호출에서 문서 읽기


    다음에, 우리는 initializeDb 방법에서readdocument 방법을 호출할 것이다.
     private async Task InitializeDB () {
                this.client = new DocumentClient (new Uri (ConfigurationManager.AppSettings["accountEndpoint"]), ConfigurationManager.AppSettings["accountKey"]);
    
                await this.client.CreateDatabaseIfNotExistsAsync (new Database { Id = "customers" });
    
                await this.client.CreateDocumentCollectionIfNotExistsAsync (UriFactory.CreateDatabaseUri ("customers"), new DocumentCollection {
                    Id = "users", PartitionKey = new PartitionKeyDefinition () { Paths = new System.Collections.ObjectModel.Collection<string> () { "/userId" } }
                });
    
                Console.WriteLine ("Database and collection creation/validation is complete");
    
                await this.CreateUserDocumentIfNotExists ("customers", "users", new UserData ().nelapin);
                await this.CreateUserDocumentIfNotExists ("customers", "users", new UserData ().yanhe);
                👇 // reading document code invokation
                await this.ReadUserDocument ("customers", "users", new UserData ().yanhe);
            }
    
    
    출력 보기dotnet run를 실행하십시오.

    Cosmos 데이터베이스에서 문서 업데이트


    Azure Cosmos DB는 JSON 문서 교체를 지원합니다.흥미로운 것은 VisualStudio 코드에서 문서를 직접 업데이트할 수도 있다는 것이다.dotnet 핵심 프로그램에서 사용자의 성씨를 바꿉니다.

    나는 방법을 사용하여 기존 문서를 업데이트할 것이다.

    문서 교체 동기화 동기화 방법 사용


    코드를 작성하고 사용자 문서를 ReplaceDocumentAsync 방법으로 바꿉니다.
            private async Task ReplaceUserDocument (string databaseName, string collectionName, User updatedUser) {
                try {
                    await this.client.ReplaceDocumentAsync (UriFactory.CreateDocumentUri (databaseName, collectionName, updatedUser.Id), updatedUser, new RequestOptions { PartitionKey = new PartitionKey (updatedUser.UserId) });
                    this.WriteToConsoleAndPromptToContinue ("Replaced last name for {0}", updatedUser.LastName);
                } catch (DocumentClientException de) {
                    if (de.StatusCode == HttpStatusCode.NotFound) {
                        this.WriteToConsoleAndPromptToContinue ("User {0} not found for replacement", updatedUser.Id);
                    } else {
                        throw;
                    }
                }
            }
    
    

    업데이트 문서 실행 코드


    다음에 나는 ReplaceUserDocument 방법에서 initializeDb 방법을 호출할 것이다.
    private async Task InitializeDB () {
        this.client = new DocumentClient (new Uri (ConfigurationManager.AppSettings["accountEndpoint"]), ConfigurationManager.AppSettings["accountKey"]);
    
        await this.client.CreateDatabaseIfNotExistsAsync (new Database { Id = "customers" });
    
        await this.client.CreateDocumentCollectionIfNotExistsAsync (UriFactory.CreateDatabaseUri ("customers"), new DocumentCollection {
            Id = "users", PartitionKey = new PartitionKeyDefinition () { Paths = new System.Collections.ObjectModel.Collection<string> () { "/userId" } }
        });
    
        Console.WriteLine ("Database and collection creation/validation is complete");
    
        // Create User
        await this.CreateUserDocumentIfNotExists ("customers", "users", new UserData ().nelapin);
        await this.CreateUserDocumentIfNotExists ("customers", "users", new UserData ().yanhe);
    
        // Read User
        await this.ReadUserDocument ("customers", "users", new UserData ().yanhe);
    
        👇 // Update User
        var userToUpdate = new UserData ().yanhe;
        userToUpdate.LastName = "Ruk";
        await this.ReplaceUserDocument ("customers", "users", userToUpdate);
    }
    
    
    다음 실행 dotnet run & 알림 문서가 성공적으로 업데이트되었습니다.


    Cosmos 데이터베이스에서 문서 삭제


    방법으로 문서를 삭제할 수 있습니다.이 절에서 첫 번째 사용자를 삭제하는 방법을 보여 드리겠습니다.
    DeleteDocumentAsync

    DeleteUserDocument 메서드 사용


    코드를 작성하고 DeleteUserDocument 방법으로 사용자를 삭제합시다.
    private async Task DeleteUserDocument (string databaseName, string collectionName, User deletedUser) {
        try {
            await this.client.DeleteDocumentAsync (UriFactory.CreateDocumentUri (databaseName, collectionName, deletedUser.Id), new RequestOptions { PartitionKey = new PartitionKey (deletedUser.UserId) });
    
            Console.WriteLine ("Deleted user {0}", deletedUser.Id);
    
        } catch (DocumentClientException de) {
            if (de.StatusCode == HttpStatusCode.NotFound) {
                this.WriteToConsoleAndPromptToContinue ("User {0} not found for deletion", deletedUser.Id);
            } else {
                throw;
            }
        }
    }
    
    

    사용자 문서 삭제

    DeleteUserDocument 방법에서 InitializeDB을 사용하겠습니다.
    private async Task InitializeDB () {
            this.client = new DocumentClient (new Uri (ConfigurationManager.AppSettings["accountEndpoint"]), ConfigurationManager.AppSettings["accountKey"]);
    
            await this.client.CreateDatabaseIfNotExistsAsync (new Database { Id = "customers" });
    
            await this.client.CreateDocumentCollectionIfNotExistsAsync (UriFactory.CreateDatabaseUri ("customers"), new DocumentCollection {
                Id = "users", PartitionKey = new PartitionKeyDefinition () { Paths = new System.Collections.ObjectModel.Collection<string> () { "/userId" } }
            });
    
            Console.WriteLine ("Database and collection creation/validation is complete");
    
            // Create User
            await this.CreateUserDocumentIfNotExists ("customers", "users", new UserData ().nelapin);
            await this.CreateUserDocumentIfNotExists ("customers", "users", new UserData ().yanhe);
    
            // Read User
            await this.ReadUserDocument ("customers", "users", new UserData ().yanhe);
    
            // Update User
            var userToUpdate = new UserData ().yanhe;
            userToUpdate.LastName = "Ruk";
            await this.ReplaceUserDocument ("customers", "users", userToUpdate);
    
            👇 // Delete User
            await this.DeleteUserDocument ("customers", "users", new UserData ().yanhe);
        }
    
    
    마지막으로 프로그램 실행 dotnet run 을 실행하고 사용자가 삭제되었음을 주의하십시오.

    나는 네가 나와 함께 코드를 쓰는 것을 좋아하길 바란다.마지막으로 VisualStudio 코드에서 코스모스 noSQL 데이터에 대해 CRUD 작업을 수행하는 방법을 배웠습니다.
    만약 당신이 이 글을 좋아한다면, 당신의 친구에게 공유하고, 건의나 생각이 있으면, 댓글창에 쓰십시오.

    풀 스택 개발자 되기💻


    나는 에서 가르친다.만약 당신이 소프트웨어 개발자가 되고 싶다면, 당신의 운영자를 새로운 소프트웨어 엔지니어나 수석 개발자/프로그래머로 발전시켜라.우리의 모든 개발 교육 계획을 구독하는 것을 고려하다.많은 프로그래밍 실습을 통해 Angular, RxJS, JavaScript, 시스템 구조 등을 배울 수 있습니다.저희는 매달 회원 계획을 가지고 있습니다. 귀하는 저희의 모든 동영상 수업, 슬라이드 쇼, 원본 코드 다운로드와 매달 동영상 통화를 무한히 방문할 수 있습니다.
  • 구독Fullstack Master을 통해 현재와 미래의 각도 노드를 방문하십시오.js와 관련 과정.
  • PRO 플랜의 모든 정보를 보려면 All-Access Membership PRO plan를 구독하십시오.또한 Rupesh 월 1회 현장 질의응답 화상 통화를 통해 질문/질문을 던지고 도움말, 팁 및 팁을 얻을 수 있습니다.
  • Your bright future is awaiting for you so visit today FullstackMaster and allow me to help you to board on your dream software company as a new Software Developer, Architect or Lead Engineer role.


    💖 말하다👋 내놔!
    루페시 티발리
    설립자All-Access Membership ELITE plan
    이메일: Fullstack Master
    웹 사이트: [email protected]|www.rupeshtiwari.com

    좋은 웹페이지 즐겨찾기