Пример #1
0
        static int Main(string[] args)
        {
            // Korzystamy z bloku using () {}, by upewnić się, że wraz z zakończeniem bloku zostanie usunięty
            // stworzony na potrzeby tego bloku kontekst do bazy danych. Za każdym razem gdy będziemy chcieli
            // zawartość bazy danych lub dostać się do zasobów w niej zawartych powinniśmy tworzyć nowy kontekst
            // W tym miejscu należy zaznaczyć, że nie będzie to błąd ani problem wydajnościowy, z powodu ciągłego
            // rozłączania się z bazą i ponowniego łączenia, ponieważ połączenia do bazy danych w większości są
            // wrzucane do wspóldzielonej puli, każde takie połączenie może być "za chwilę" ponownie użyte.
            //
            // Zobacz więcej:
            //     > using () {} - https://www.dotnetperls.com/using
            //     > connection pooling - https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

            using (var dbCtx = new DefaultAppDbConnection())
            {
                bool closeApp = false;
                while (closeApp == false)
                {
                    try
                    {
                        switch (Menu())
                        {
                        case 1:     // Wyświetlanie wszystkich wpisów
                            Console.Clear();
                            PrintAllDishes(unitOfWork.DishRepository.GetAll());
                            break;

                        case 2:     // Create - Dodawanie nowego wpisu
                            InsertNewManualDish(unitOfWork.DishRepository);
                            unitOfWork.Save();
                            break;

                        case 3:     // Pobieranie konkretnego wpisu
                            Console.WriteLine(PrintDish(FindDishByName(unitOfWork.DishRepository)));
                            break;

                        case 4:     // Aktualizacja wpisu
                            Console.Clear();
                            EditDish(FindDishByName(unitOfWork.DishRepository));
                            unitOfWork.Save();
                            Console.WriteLine("Zaktualizowano wpis!");
                            break;

                        case 5:     // Usuwanie wpisu
                            Console.Clear();
                            RemoveDish(unitOfWork.DishRepository);
                            unitOfWork.Save();
                            Console.WriteLine("Usunięto wpis!");
                            break;

                        case 0: return(0);
                        }
                    }
                    catch (Exception e)
                    {
                        if (e is InvalidOperationException || e is ArgumentNullException)
                        {
                            Console.WriteLine("Uwaga! Poważny błąd: ");
                            Console.WriteLine(e.Message);


                            Console.Write("\n\nCzy wyświetlić stack trace? [y/n]: ");

                            if (Console.ReadLine().ToUpper() == "Y")
                            {
                                Console.WriteLine(e.StackTrace);
                            }
                        }
                        else
                        {
                            throw e;
                        }
                    }
                    finally
                    {
                        Console.Write("\n\nWcisnij dowolny klawisz by wrócić do głównego menu!");
                        Console.ReadKey();
                    }
                }

                return(0);
            }
        }