/// <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("Метод не смог найти сущность для возврата!"); } }
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()); }
/// <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)); } }