// Konstruktor tworzący kompletny obiekt zawierający wszystkie dane dotyczące gracza. Tworzony
        // jest nowy plik XML (lub nadpisywany istniejący) zawierający informacje o graczu.
        //
        // todo: Pliki są tworzone również dla anonimowych użytkowników (niezalogowanych), można
        //       by zrobić mechanizm, który będzie usuwał stare pliki, żeby nie zajmowały miejsca na
        //       serwerze. Dostęp do pliku z poziomu niezalogowanego użytkownika jest obecnie niemożliwy.
        public CharacterDbModel(
            Character character,
            ApplicationUser user = null
            ) : this(user)
        {
            // Tworzenie pliku XML (nadpisuje istniejące pliki)
            XmlModels.Character characterXml = new XmlModels.Character(character);

            // Aktualizacja danych w modelu
            CharacterName    = character.Name;
            ChartID          = character.ChartID;
            CharacterID      = character.CharacterID;
            AvatarImgSrc     = character.AvatarImg;
            CharacterDataSrc = DefaultConstants.Application.DefaultXmlLocalization(
                                    CharacterID.ToString(),
                                    DefaultConstants.Application.DefaultCharacterXmlFolder
                                    );
        }
        // Konstruktor tworzący gotowy model. Dane pobiera zarówno z bazy danych, jak i z pliku
        // XML, dlatego warto upewnić się, że plik rzeczywiście istnieje.
        //
        // todo: Obsługa wyjątków w przypadku, gdy odczytywanie pliku nie powiedzie się:
        //       * ArgumentNullException    - gdy nie zostanie przekazana nazwa pliku (CharacterID)
        //       * FileNotFoundException    - gdy plik nie istnieje
        //       * NullReferenceException   - następstwo dwóch poprzednich, powstanie pusty obiekt,
        //                                    z którego będziemy próbowali odczytać dane
        /// <summary>Tworzy kompletny obiekt gracza zawierający wszystkie informacje</summary>
        /// <param name="characterDb">Model z danymi z bazy</param>
        public Character(
            CharacterDbModel characterDb
            )
        {
            // Przepisywanie danych do obiektu z bazy danych
            CharacterID = characterDb.CharacterID;
            ChartID     = characterDb.ChartID;
            UserID      = characterDb.UserID;
            Name        = characterDb.CharacterName;
            AvatarImg   = characterDb.AvatarImgSrc;

            // Uzupełnianie danych użytkownika, który stworzył gracza
            if (UserID != null)
            {
                UserData = new User(ApplicationDbContext.Create().Users.Find(UserID));
            }
            else UserData = null;

            // Odczytywanie pliku XML
            // UWAGA - Nie sprawdza, czy plik istnieje, możliwy wyjątek!
            XmlModels.Character characterXml = new XmlModels.Character(CharacterID);

            // Przepisywanie danych do obiektu z pliku XML
            Data            = DefaultMethods.ToDictionary(characterXml.Data);
            Stats           = DefaultMethods.ToDictionary(characterXml.Stat);
            Attributes      = DefaultMethods.ToDictionary(characterXml.Attribute);
            Skills          = DefaultMethods.ToDictionary(characterXml.Skill);
            if (characterXml.Equipment != null)
            Equipment   = characterXml.Equipment.ToArray();
            else
                Equipment   = null;
            if (characterXml.Description != null)
                Description = characterXml.Description.ToString();
            else
                Description = null;
        }