Есть ли более короткий, лучший и оптимизированный способ заполнить этот список из базы данных SQL - PullRequest
0 голосов
/ 02 июля 2018

Я получил этот код, и он работает без проблем. Но я чувствую, что есть гораздо лучший способ сделать это.

    namespace Repositories
    {
        public class AuthorRepository : IAuthorRepository
        {
            public List<Author> GetAllFromRepo()
            {
                using (AppContext myDB = new AppContext())
                {
                    List<Author> authorsFromRepo = new List<Author>();
                    foreach (var item in myDB.Authors)
                    {
                        authorsFromRepo.Add(new Author()
                        {
                            Books = new List<Book>(),
                            ID = item.ID,
                            FirstName = item.FirstName,
                            LastName = item.LastName
                        });
                    }
                    return authorsFromRepo.ToList();
                }
            }
        }
    }

Когда я пробую что-то вроде этого:

 public List<Author> GetAllFromRepo()
    {
        using (AppContext myDB = new AppContext())
        {
            List<Author> authorsFromRepo = new List<Author>();

            authorsFromRepo = myDB.Authors.ToList();
            return authorsFromRepo;
        }
    }

Я всегда получаю эту ошибку:

Значение не может быть нулевым. Имя параметра: источник Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым. Имя параметра: источник Ошибка источника: строка 33: вернуть авторов. Выберите (x => new AuthorViewModel ()

Любая помощь? Модель, куда меня выводит ошибка

namespace Services
{
    public class AuthorService : IAuthorService
    {
        private readonly IAuthorRepository _AuthorRepository;

        public AuthorService(IAuthorRepository authorRepository)
        {
            _AuthorRepository = authorRepository;
        }
        public List<AuthorViewModel> GetAll()
        {
            List<Author> authors = _AuthorRepository.GetAllFromRepo();

            return authors.Select(x => new AuthorViewModel()
            {
                ID = x.ID,
                FullName = $"{x.FirstName } {x.LastName} ",
                Books = x.Books.Select(g => new BookViewModel()
                {
                    ID = g.ID,
                    Name = g.Name
                }).ToList()
            }).ToList();

        }
    }
}

Чтобы добавить еще раз, все работает нормально, если я использую первый пример кода. Когда я пытаюсь что-то короткое, как

 return myDB.Authors.ToList();

я получаю ошибку.

когда я перехожу на:

return authors.Select(x => new AuthorViewModel()
       {
        ID = x.ID,
        FullName = $"{x.FirstName } {x.LastName} ",
        Books = {}
        }).ToList();

Тогда это работает ... но это означает, что он не читает книги авторов ...

1 Ответ

0 голосов
/ 02 июля 2018

Мне пришлось изменить модель для авторов на

namespace Entities
{
    public class Author
    {
        // this is what a had to add here
        // From here
        public Author()
        {
            Books = new List<Book>();
        }
        // to here

        public int   ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public List<Book> Books { get; set; }
    }
}

Так что я не получу никаких ошибок, когда x.Books будет нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...