Wprowadzenie

W tym artykule skupimy się na utworzeniu aplikacji konsolowej przygotowanej w technologii .NET Core, która będzie współpracowała z bazą danych NoSQL - w naszym przykładzie będzie to MongoDB.

Jeżeli ten rodzaj baz danych jest dla Ciebie nieznany, lub też chcesz delikatnie odswieżyć swoją wiedzą zapraszam do artykułu poświęconemu wprowadzeniu do NoSQL

Zanim przystąpimy do tworzenia prostej aplikacji konsolowej musimy poświeć kilka chwil na przygotowanie naszego środowiska. W pierwszej kolejności należy zainstalować serwer bazy danych NoSQL, tj. MongoDB. Plik instalacyjny dostępny jest pod adresem: https://www.mongodb.com/download-center/community?jmp=nav

Następny krok nie jest obowiązkowy ale osobiście uważam, że warto mieć graficzny interfejs użytkownika (GUI) do zarządzania serwerem MongoDB. Jednym z przykładowych narzędzi, które możesz zainstalować jest Mongobooster (https://nosqlbooster.com/ ). Nic jednak nie stoi na przeszkodzie w pracy z linią poleceń - ja jednak pokażę oba podejścia.

Konfiguracja

Artykuł będzie oparty o 8 kroków, które przeprowadzą Cię przez proces konfiguracji i tworzenia prostej aplikacji konsolowej.

  1. W pierwszym kroku utworzymy folder pod nazwą data na dysku C. Wewnątrz dodamy folder db. W tym miejscu będzie przechowywana nasza baza danych.
  2. Musimy teraz uruchomić instancję MongoDB. W tym celu należy przejść do folderu instalacyjnego: C:\Program Files\MongoDB\Server\3.2\bin. Folder bin musimy otworzyć z poziomu linii poleceń. Najłatwiej tego dokonać klikając shift + prawy przycisk myszy - otworzymy okno dialogowe w którym pojawi się możliwość otwarcia linii poleceń w tym folderze: Menu kontekstowe

    Uruchamiamy plik mongod.exe wraz z parametrem --dbpath w poniższej postaci:
    C:\Program Files\MongoDB\Server\4.0\bin>mongod.exe --dbpath C:\data\db.
    
  3. Serwer MongoDB działa i jest gotowy do pracy. Pamiętajcie jednak, żeby nie zamykać okna dialogowego, aż do zakończenia pracy. Możemy teraz otworzyć Mongobooster i utworzyć połączenie z bazą danych. Przechodzimy przez wskazane opcje: File -> Connect -> Create (zostawiamy domyślny port 27017) -> kilkamy przycisk Save and Connect: MoongoBooster Mamy gotowe połączenie z naszym serwerem.
  4. W kolejnym kroku dodamy nową bazę danych. Jako, że zwykle moje przykłady związane są z samochodami dodamy bazę danych pod nazwą Cars. Klikamy prawym przyciskiem myszy na localhost (panel po lewej stronie) i dodajemy bazę danych o wspomnianej wcześniej nazwie.

    Następnie klikamy prawym przyciskiem myszy na nowo utworzoną bazę danych i dodajemy Collection - to nic innego jak tabela w bazie danych. Aby być konsekwentnym zdefiniujemy nazwę jako CarDetails. Możemy teraz podejrzeć zawartość naszej tabeli (jest pusta), ale pozwoli nam sprawdzić czy sam proces tworzenia został wykonany poprawnie. Klikamy prawym przyciskiem myszy na naszą tabelę i wybieramy View. Możemy również kliknąć dwa razy lewym przyciskiem myszy na nazwę tabeli. MongoDB: pusta baza danych
  5. W piątym kroku naszego artykułu utworzymy aplikację konsolową - tym razem bez zbędnego komentarza :-)
  6. W świeżo utworzonym projekcie brakuje nam odpowiedniej paczki do zarządzania połączeniem z bazą danych MongoDB. Otwieramy NuGet Package Manager i szukamy następującego sterownika: MongoDB.Driver. NuGet Package Manager: MongoDb:Driver
  7. Ten krok jest najdłuższy - musimy przygotować odpowiedni kod do współpracy z naszą bazą danych. Poniżej, wraz z komentarzami, znajdziecie prosty przykład pozwalający na wykonywanie podstawowych operacji CRUD:
    using System;
    // Biblioteki potrzebne do pracy z MongoDB
    using MongoDB.Bson;
    using MongoDB.Driver;
    namespace MongoDB
    {
    	public class CarModel
    	{
    		public ObjectId Id { get; set; }
    		public string Brand { get; set; }
    		public string Model { get; set; }
    		public string Engine { get; set; }
    		public int HorsePower { get; set; }
    	}
    	class Program
    	{
    		protected static IMongoClient _client;
    		protected static IMongoDatabase _database;
    		public static CarModel GetCar()
    		{
    			// Poniżej własna definicja pojazdu
    			CarModel car = new CarModel()
    			{
    				Brand = "Audi",
    				Model = "RS6 C6",
    				Engine = "V10",
    				HorsePower = 580,
    			};
    			return car;
    		}
    		/// <summary>
    		/// 4-ry podstawowe funkcje pozwalające na zarządzanie danymi
    		/// CRUD: create, read, update, delete
    		/// </summary>
    		public void CRUDoperationsWithMongoDB()
    		{
    			_client = new MongoClient();
    			// Poniżej podaj nazwę utworzonej przez siebie w poprzednim kroku bazy danych
    			_database = _client.GetDatabase("Cars");
    			var data = _database.GetCollection<CarModel>("CarDetails");
    			Console.WriteLine("Podaj typ operacji, którą chesz wykonać:\n1: Insert \n2: Update \n3Delete \n4Read ");
    			string userChoice = Console.ReadLine();
    			switch (userChoice)
    			{
    				case "1":
    					// Insert (wstawianie danych)
    					data.InsertOne(GetCar());
    					break;
    				case "2":
    					// Update (aktualizacja danych)
    					var car = GetCar();
    					data.FindOneAndUpdate<CarModel>
    						(Builders<CarModel>.Filter.Eq("Brand", car.Brand),
    						Builders<CarModel>.Update.Set("HorsePower", 720));
    					break;
    				case "3":
    					// Szukamy danego elementu i kasujemy z tabeli
    					string deleteModel = "RS6";
    					// zamiast powyższego zapisu powinniśmy pozwolić użytkownikowi na wpisanie modelu, który chce usunać
    					// Console.WriteLine("Podaj nazwę modelu, który chesz usunać z bazy danych: ");
    					// deleteModel = Console.ReadLine();
    					data.DeleteOne(d => d.Model == deleteModel);
    					break;
    				case "4":
    					// Operacja kasowania zwracania danych
    					var readAll = data.Find(new BsonDocument());
    					Console.WriteLine();
    					foreach (var item in readAll.ToEnumerable())
    					{
    						Console.WriteLine($"Id: {item.Id}, Marka: {item.Brand}, Model: {item.Model}, Silnik: {item.Engine}-{item.HorsePower}KM");
    					}
    					break;
    				default:
    					Console.Write("Wybierz obsługiwany typ operacji!");
    					break;
    			}
    			// Kontynuacja pracy programu
    			Console.WriteLine("\n-------------------------------------------\n");
    			Console.WriteLine("Wciśnij Y, aby wykonać kolejną operację...");
    			userChoice = Console.ReadLine();
    			// Dzięki poniższemu sprawdzeniu możemy kontynuować pracę z aplikacją konsolową
    			if(userChoice == "Y" || userChoice =="y")
    			{
    				this.CRUDoperationsWithMongoDB();
    			}
    		}
    		static void Main(string[] args)
    		{
    			Program p = new Program();
    			p.CRUDoperationsWithMongoDB();
    			Console.WriteLine("Naciśnij dowolny klawisz, aby zamknać aplikację");
    			Console.ReadKey();
    		}
    	}
    }
    
  8. Uruchamiamy nasz projekt w celu sprawdzenia rezultatów implementacji. MongoDB: wypełniona tabela

Podsumowanie

W tym artykule pokazałem podstawowe operacje CRUD na podstawie aplikacji konsolowej wykonanej w technologii .NET Core oraz bazie danych NoSQL - w naszym przypadku MongoDB. Po uruchomieniu aplikacji konsolowej możecie wykonywać różne operacje sprawdzając czy baza danych została odpowiednio zmodyfikowana. Warto również poświęcić trochę uwagi na zapoznanie się z formatem BsonDocument. W powyższym przykładzie użyliśmy gotowej implementacji. Więcej szczegółów możecie znaleźć pod poniższym adresem http://mongodb.github.io/mongo-csharp-driver/2.3/reference/bson/