예제 #1
0
        /// <summary>
        /// Возвращает сущность из БД, проводя поиск по входному значению его имени
        /// (согласно параметру Name, имеющегося у имплементаторов IDbObject).
        /// </summary>
        ///
        /// <param name="nameOfEntity"> Имя искомой сущности (в базе данных будет проводится поиск по столбцу Name). </param>
        /// <param name="typeOfReturnedDTO"> Тип искомой сущности (должен быть реализатором IDTOModel). </param>
        ///
        /// <returns> Объект IDTOModel с данными о найденной сущности. </returns>
        ///
        /// <exception cref="TypeAccessException"> Если значение typeOfEntity не соответствует ни одному из поддерживаемых в методе. </exception>
        /// <exception cref="NullReferenceException"> Если не была найдена сущность для возврата. </exception>
        public IDTOModel ReturnEntityFromDb(string nameOfEntity, Type typeOfReturnedDTO)
        {
            IDTOModel dtoModel;

            if (typeOfReturnedDTO == typeof(DTONews))
            {
                var dbModel = _context.News.FirstOrDefault(news => news.Name == nameOfEntity);
                dtoModel = new DTONews(dbModel);
            }
            else if (typeOfReturnedDTO == typeof(DTOUser))
            {
                var users = _context.Users.ToList();

                var dbModel = users.FirstOrDefault(user => user.Name == nameOfEntity);
                dtoModel = new DTOUser(dbModel);
            }
            else
            {
                throw new TypeAccessException("Входной тип данных не соответствует ни одному из поддерживаемых в методе!");
            }

            if (dtoModel != null)
            {
                return(dtoModel);
            }
            else
            {
                throw new NullReferenceException("Метод не смог найти сущность для возврата!");
            }
        }
예제 #2
0
        public async Task <IActionResult> AddNews(AddNewsVM model)
        {
            if (ModelState.IsValid)
            {
                var author = new FullDBManager().ReturnEntityOrNullDTOFromDb(model.NameOfAuhtor, typeof(DTOUser));

                var news = new DTONews(author as DTOUser, model.NameOfNews, model.DocFile.FileName);

                //TODO: Сделать эти операции параллельными.
                await new FullDBManager().AddEntityToDb(news);
                await FileManager.SaveFileOfNews(model.DocFile);
            }

            return(RedirectToHomePage());
        }
예제 #3
0
        /// <summary>
        /// Возвращает сущность из БД, проводя поиск по входному значению его имени
        /// (согласно параметру Name, имеющегося у имплементаторов IDbObject).
        /// </summary>
        ///
        /// <param name="nameOfEntity"> Имя искомой сущности (в базе данных будет проводится поиск по столбцу Name). </param>
        /// <param name="typeOfEntity"> Тип искомой сущности (должен быть реализатором IDTOModel). </param>
        ///
        /// <returns>
        /// Объект IDTOModel с данными о найденной сущности. В ином случае - экземпляр NullDTO.
        /// </returns>
        public IDTOModel ReturnEntityOrNullDTOFromDb(string nameOfEntity, Type typeOfEntity)
        {
            IDTOModel dbEntity;

            try
            {
                if (typeOfEntity == typeof(DTONews))
                {
                    dbEntity = new DTONews(_context.News.First(news => news.Name == nameOfEntity));
                }
                else if (typeOfEntity == typeof(DTOUser))
                {
                    dbEntity = new DTOUser(_context.Users.First(user => user.Name == nameOfEntity));
                }
                else
                {
                    throw new TypeAccessException
                              ("Входной тип данных не соответствует ни одному из поддерживаемых в методе!");
                }


                if (dbEntity != null)
                {
                    return(dbEntity);
                }
                else
                {
                    throw new NullReferenceException("Метод не смог найти сущность для возврата!");
                }
            }
            catch (TypeAccessException)
            {
                return(new NullDTO(typeOfEntity));
            }
            catch (ArgumentNullException)
            {
                return(new NullDTO(typeOfEntity));
            }
            catch (InvalidOperationException)
            {
                return(new NullDTO(typeOfEntity));
            }
        }