コード例 #1
0
ファイル: LinqToSql.cs プロジェクト: Astro1247/SQL_App1
        private static void NewChat()
        {
            int        creatorId = -1, member = -1;
            MenuChoice NewChatMenu = MenuManager.Menu(new string[] { "Select chat creator", "Select member", "Create chat", "Exit" }, $"New chat menu\r\nCreator: {creatorId}\r\nMember: {member}");

            while (NewChatMenu.choice != "Exit")
            {
                switch (NewChatMenu.choice_id)
                {
                case 0:
                    creatorId = SelectUser("Please select chat creator");
                    break;

                case 1:
                    member = SelectUser("Please select chat member");
                    break;

                case 2:
                    CreateNewChat(creatorId, member);
                    break;
                }

                MenuManager.Menu(NewChatMenu, $"New chat menu\r\nCreator: {creatorId}\r\nMember: {member}");
            }
        }
コード例 #2
0
ファイル: LinqToSql.cs プロジェクト: Astro1247/SQL_App1
        private static void Menu()
        {
            MenuChoice MainMenu = MenuManager.Menu(new string[] { "Create new chat", "Print \"accounts\" table", "Transaction", "Exit" }, "Messenger example usage Linq to Sql");

            while (MainMenu.choice != "Exit")
            {
                switch (MainMenu.choice)
                {
                case "Create new chat":
                    NewChat();
                    break;

                case "Print \"accounts\" table":
                    DispAccountsTable();
                    break;

                case "Transaction":
                    Transaction();
                    break;

                default:
                    break;
                }

                Console.ReadKey(true);
                MenuManager.Menu(MainMenu);
            }
        }
コード例 #3
0
ファイル: CodeFirst.cs プロジェクト: Astro1247/SQL_App1
        private void EditPassword(BaseContext cntx, Users query, MenuChoice usersMenuChoice)
        {
            Console.Clear();
            Console.WriteLine($"Current password: {cntx.Users.Where(u => u.Username == usersMenuChoice.choice).FirstOrDefault().Password}");
            string newPassword = Core.GetInput("New password");

            Console.WriteLine("In process . . .");
            query.Password = newPassword;
        }
コード例 #4
0
ファイル: CodeFirst.cs プロジェクト: Astro1247/SQL_App1
        private void EditUser(BaseContext cntx)
        {
            Dictionary <int, string> users = new Dictionary <int, string>();

            foreach (Users cntxUser in cntx.Users)
            {
                users.Add(cntxUser.Id, cntxUser.Username);
            }

            string[] usernames = new string[users.Values.Count];
            users.Values.CopyTo(usernames, 0);
            MenuChoice usersMenuChoice = MenuManager.Menu(usernames, "Choose what user you want to edit");

            MenuChoice EditUserMenu = MenuManager.Menu(new string[] { "Edit username", "Edit password", "Go back" });

            while (EditUserMenu.choice != "Go back")
            {
                var query = (from e in cntx.Users
                             where e.Username == usersMenuChoice.choice
                             orderby e.Id ascending
                             select e).FirstOrDefault();

                switch (EditUserMenu.choice)
                {
                case "Edit username":
                    EditUsername(cntx, query, usersMenuChoice);
                    break;

                case "Edit password":
                    EditPassword(cntx, query, usersMenuChoice);
                    break;
                }


                try
                {
                    cntx.SaveChanges();
                    Console.WriteLine(
                        $"{(EditUserMenu.choice == "Edit username" ? "Username" : EditUserMenu.choice == "Edit password" ? "Password" : "undefined")} for user '{usersMenuChoice.choice}' was successfully changed!"
                        .DrawInConsoleBox());
                    Console.WriteLine("Press any key to continue . . .");
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    Console.WriteLine("Conflict detected!".DrawInConsoleBox());
                    foreach (DbEntityEntry exEntry in ex.Entries)
                    {
                        var dbValues = exEntry.GetDatabaseValues();
                        exEntry.OriginalValues.SetValues(dbValues);
                    }
                }

                Console.ReadKey(true);
                MenuManager.Menu(EditUserMenu);
            }
        }
コード例 #5
0
ファイル: CodeFirst.cs プロジェクト: Astro1247/SQL_App1
        private void EditUsername(BaseContext cntx, Users query, MenuChoice usersMenuChoice)
        {
            Console.Clear();
            Console.WriteLine($"Current username: {usersMenuChoice.choice}");
            string newUsername = Core.GetInput("New username");

            Console.WriteLine("In process . . .");
            query.Username         = newUsername;
            usersMenuChoice.choice = newUsername;
        }
コード例 #6
0
ファイル: MenuManager.cs プロジェクト: Astro1247/SQL_App1
        public static MenuChoice Menu(string[] choices, string title = "Make your choice")
        {
            var mc = new MenuChoice();

            mc.choices = choices;
            Console.Clear();
            for (int i = 0; i < choices.Length + 1; i++)
            {
                Console.Write("\r\n");
            }
            Console.WriteLine(title.DrawInConsoleBox());
            //var menu = new Menu(new string[] { "John", "Bill", "Janusz", "Grażyna", "1500", ":)" });
            var menu        = new MenuClass(choices);
            var menuPainter = new ConsoleMenuPainter(menu);

            var done = false;

            do
            {
                menuPainter.Paint(0, 0);

                var keyInfo = Console.ReadKey();

                switch (keyInfo.Key)
                {
                case ConsoleKey.UpArrow:
                    menu.MoveUp();
                    break;

                case ConsoleKey.DownArrow:
                    menu.MoveDown();
                    break;

                case ConsoleKey.Enter:
                    done = true;
                    break;
                }
            } while (!done);

            mc.choice_id = menu.SelectedIndex;
            mc.choice    = menu.SelectedOption;
            mc.used      = true;
            mc.title     = title;

            Console.ForegroundColor = ConsoleColor.Cyan;
            //Console.WriteLine("Selected option: " + (menu.SelectedOption ?? "(nothing)"));
            //Console.ReadKey();

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.BackgroundColor = ConsoleColor.Black;
            Console.Clear();
            //return menu.SelectedOption;
            return(mc);
        }
コード例 #7
0
ファイル: CodeFirst.cs プロジェクト: Astro1247/SQL_App1
        private void DeleteUser(BaseContext cntx)
        {
            Dictionary <int, string> users = new Dictionary <int, string>();

            foreach (Users cntxUser in cntx.Users)
            {
                users.Add(cntxUser.Id, cntxUser.Username);
            }

            string[] usernames = new string[users.Values.Count];
            users.Values.CopyTo(usernames, 0);
            MenuChoice usersMenuChoice = MenuManager.Menu(usernames, "Choose which user you want delete");

            Console.WriteLine("In process . . .");
            Users cntxUsers = cntx.Users
                              .Where(u => u.Username == usersMenuChoice.choice)
                              .FirstOrDefault();

            cntx.Users.Remove(cntxUsers);
            cntx.SaveChanges();
            Console.WriteLine($"User '{usersMenuChoice.choice}' was successfully deleted!".DrawInConsoleBox());
            Console.WriteLine("Press any key to continue . . .");
        }
コード例 #8
0
ファイル: CodeFirst.cs プロジェクト: Astro1247/SQL_App1
        //Отложенная загрузка (lazy loading) заключается в том, что Entity Framework автоматически загружает данные,
        //при этом не загружая связанные данные. Когда потребуются связанные данные Entity Framework создаст еще один запрос к базе данных.
        public static void LazyLoading(BaseContext cntx)
        {
            Dictionary <int, string> users = new Dictionary <int, string>();

            foreach (Users cntxUser in cntx.Users)
            {
                users.Add(cntxUser.Id, cntxUser.Username);
            }

            string[] usernames = new string[users.Values.Count];
            users.Values.CopyTo(usernames, 0);
            MenuChoice usersMenuChoice = MenuManager.Menu(usernames, "Choose user to load");

            var user = (from e in cntx.Users
                        where e.Username == usersMenuChoice.choice
                        orderby e.Id ascending
                        select e).FirstOrDefault();

            // Попытаться загрузить связанные с ним ключи
            if (user != null && user.Keys != null)
            {
                for (int i = 0; i < user.Keys.Count; i++)
                {
                    DataModel.Keys key = user.Keys.ElementAt(i);
                    if (key != null)
                    {
                        Console.WriteLine($"Key: {key.Key}");
                    }
                }
            }

            Console.WriteLine();
            Console.WriteLine($"All existing keys owned by '{user.Username}'".DrawInConsoleBox());
            Console.ReadKey(true);
            //                foreach (var key in user.Keys)
            //                    Console.WriteLine("Key: " + key.Key);
        }
コード例 #9
0
ファイル: CodeFirst.cs プロジェクト: Astro1247/SQL_App1
        private void AddKeyForUser(BaseContext cntx)
        {
            Dictionary <int, string> users = new Dictionary <int, string>();

            foreach (Users cntxUser in cntx.Users)
            {
                users.Add(cntxUser.Id, cntxUser.Username);
            }

            string[] usernames = new string[users.Values.Count];
            users.Values.CopyTo(usernames, 0);
            MenuChoice usersMenuChoice = MenuManager.Menu(usernames, "Choose key owner for creating a new key");
            var        user            = (from e in cntx.Users
                                          where e.Username == usersMenuChoice.choice
                                          orderby e.Id ascending
                                          select e).FirstOrDefault();

            MenuChoice KeygenMenu = MenuManager.Menu(new string[] { "Generate", "Manual input", "Exit" },
                                                     $"Key generating menu for user: {usersMenuChoice.choice}");

            while (KeygenMenu.choice != "Exit")
            {
                switch (KeygenMenu.choice_id)
                {
                case 0:
                    AddNewKey(user, GenerateKey(), cntx);
                    break;

                case 1:
                    AddNewKey(user, Core.GetInput("Enter key value"), cntx);
                    break;
                }

                Console.ReadKey(true);
                MenuManager.Menu(KeygenMenu);
            }
        }
コード例 #10
0
ファイル: CodeFirst.cs プロジェクト: Astro1247/SQL_App1
        public static void ExplicitLoading(BaseContext cntx)
        {
            // Загрузить одного пользователя
            Dictionary <int, string> users = new Dictionary <int, string>();

            foreach (Users cntxUser in cntx.Users)
            {
                users.Add(cntxUser.Id, cntxUser.Username);
            }

            string[] usernames = new string[users.Values.Count];
            users.Values.CopyTo(usernames, 0);
            MenuChoice usersMenuChoice = MenuManager.Menu(usernames, "Choose user to load");

            var user = (from e in cntx.Users
                        where e.Username == usersMenuChoice.choice
                        orderby e.Id ascending
                        select e).FirstOrDefault();

            // Загрузить связанные с ним ключи с помощью явной загрузки
            cntx.Entry(user)
            .Collection(c => c.Keys)
            .Load();

            Console.WriteLine($"Keys for user {user.Username}".DrawInConsoleBox() + "\r\n");
            if (user != null && user.Keys.Count >= 1)
            {
                foreach (var key in user.Keys)
                {
                    if (key.OwnerId == user.Id)
                    {
                        Console.WriteLine($"Key: {key.Key}");
                    }
                }
            }
        }
コード例 #11
0
ファイル: CodeFirst.cs プロジェクト: Astro1247/SQL_App1
        public void Init()
        {
            using (BaseContext cntx = new BaseContext())
            {
                //MenuChoice CodeFirstMenu = new MenuChoice();
                //MenuChoice MainMenu = MenuManager.Menu(new string[] { "Create new chat", "Print \"accounts\" table", "Transaction", "Exit" }, "Messenger example usage Linq to Sql");
                MenuChoice CodeFirstMenu = MenuManager.Menu(new string[]
                {
                    "Register user", "Get users", "Edit user", "Delete user", "Add key", "Связанная загрузка", "Sim",
                    "Sim2", "Sim3"
                });
                while (CodeFirstMenu.choice != "Exit")
                {
                    switch (CodeFirstMenu.choice)
                    {
                    case "Register user":
                        RegisterUser(cntx);
                        break;

                    case "Get users":
                        GetUsers(cntx);
                        break;

                    case "Edit user":
                        EditUser(cntx);
                        break;

                    case "Delete user":
                        DeleteUser(cntx);
                        break;

                    case "Add key":
                        AddKeyForUser(cntx);
                        break;

                    case "Sim":
                        SimpleMethod(cntx);
                        break;

                    case "Sim2":
                        SimpleMethodTwo(cntx);
                        break;

                    case "Sim3":
                        SimpleMethodTree(cntx);
                        break;

                    case "Связанная загрузка":
                    {
                        MenuChoice LoadMenu =
                            MenuManager.Menu(new string[]
                            {
                                "Отложенная загрузка (LazyLoad)", "Прямая загрузка (EagerLoading)",
                                "Явная загрузка (ExplicitLoading)", "Add new key method", "Выйти"
                            });
                        while (LoadMenu.choice != "Выйти")
                        {
                            switch (LoadMenu.choice_id)
                            {
                            case 0:
                                LazyLoading(cntx);
                                break;

                            case 1:
                                EagerLoading(cntx);
                                Console.WriteLine(
                                    "Press 'y' to Count keys for each user, any other key to cancel"
                                    .DrawInConsoleBox());
                                var key = Console.ReadKey(true);
                                if (key.KeyChar == char.Parse("y"))
                                {
                                    EagerLoading_KeysCount(cntx);
                                }
                                break;

                            case 2:
                                ExplicitLoading(cntx);
                                break;

                            case 3:
                                //AddNewKey_method(cntx);
                                testUpdate(cntx);
                                break;
                            }
                            Console.ReadKey(true);
                            MenuManager.Menu(LoadMenu);
                        }
                    }
                    break;
                    }

                    Console.ReadKey(true);
                    MenuManager.Menu(CodeFirstMenu);
                }
            }
        }