Вложенный список очищается при втором обращении к контекстному классу - PullRequest
0 голосов
/ 19 января 2019

Эй, у меня есть структура, которая выглядит следующим образом: enter image description here

Это две библиотеки, в которых есть некоторые данные, а также список книг, называемых "книгами".

Внутри моего контроллера библиотеки я заполняю контекст с помощью имитируемых данных, таких как:

public LibrariesController(LibrariesContext context)
    {
        _context = context;

        if (_context.Libraries.Count() == 0)
        {
            // Create a new TodoItem if collection is empty,
            // which means you can't delete all TodoItems.
            _context.AddRange(getMockedLibraries());

            _context.SaveChanges();
        }
    }

Методы для имитации данных просто добавляют статический контент в этот контекст, например:

private List<Book> getMockedBooks()
    {
        List<Book> mockedBooks = new List<Book>();

        Book newBook = new Book();
        newBook.Title = "Pride and Prejudice (Paperback)";
        newBook.Author = "Jane Austen";

        mockedBooks.Add(newBook);

        newBook = new Book();
        newBook.Title = "To Kill a Mockingbird (Paperback)";
        newBook.Author = "Harper Lee";

        mockedBooks.Add(newBook);

        return mockedBooks;
    }

    private List<Library> getMockedLibraries()
    {

        List<Library> mockedLibraries = new List<Library>();



        Library newLibrary = new Library();

        newLibrary.Name = "ZUT Library";
        newLibrary.ImgSrc = "http://przemysl-40.pl/wp-content/uploads/logo_ZUT.jpg";
        newLibrary.Books = getMockedBooks();

        mockedLibraries.Add(newLibrary);

        newLibrary = new Library();

        newLibrary.Name = "US Library";
        newLibrary.ImgSrc = "http://partner.kubg.edu.ua/images/stories/Partners/poland1.jpg";
        newLibrary.Books = getMockedBooks();

        mockedLibraries.Add(newLibrary);

        return mockedLibraries;

    }

MyLibrariesContext основан на DBContextOptions и содержит библиотеку DbSet внутри:

public class LibrariesContext : DbContext
{
    public LibrariesContext(DbContextOptions<LibrariesContext> options)
        : base(options)
    {
    }

    public DbSet<Library> Libraries { get; set; }
    public DbSet<Book> Books { get; set; }
}

Самое смешное случается, когда я захожу в конечную точку / api / Libraries и хочу во второй раз увидеть на моем сайте замечательный JSON, реализация выглядит следующим образом:

// GET: api/Libraries
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Library>>> GetTodoItems()
    {
        return await _context.Libraries.ToListAsync();
    }

Я новичок в .NetCore и не могу понять, почему после второго запроса к той же конечной точке вместо списка книг я получил несколько нулей, например:

enter image description here

Буду очень признателен за любой совет.

Ответы [ 2 ]

0 голосов
/ 19 января 2019

В вашем запросе GET ваш запрос возвращает только библиотеки.Попробуйте нетерпеливо загрузить Книги, чтобы они были включены в запрос и включены в результаты:

// GET: api/Libraries 
[HttpGet] 
public async Task<ActionResult<IEnumerable<Library>>> GetTodoItems() 
{ 
    return await _context.Libraries.Include(l => l.Books).ToListAsync(); 
}
0 голосов
/ 19 января 2019

изменить return await _context.Libraries.ToListAsync(); на

 return await _context.Libraries.Include(x => x.Books).ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...